Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From .jpeg to .png
- Данните за изображението трябва да бъдат компресирани с кодиране на дължината на изпълнение (Run-length encoding (RLE) ). Това означава, че повтарящите се символи се събират сбито и само числото и съответният символ '§', който не присъства в снимката като информация, се записват. Компресията (сбиването на информацията) се прави само от повече от 3 повтарящи се символи!
- Input Output
- QQQQRRRRRRTTTTTTTTTTLLLLLLLLLLLMNNNVVVVVVVVVVVAAAAAAAAAAAAA §4Q§6R§10T§11LMNNN§11V§13A
- QQQWWWEEERRRTTTYYY QQQWWWEEERRRTTTYYY
- using System;
- using System.Text;
- public class Program
- {
- public static void Main()
- {
- var jpegPicture = Console.ReadLine();
- var counterSymbols = 0;
- var compressionSymbols = "";
- for (int i = 0; i < jpegPicture.Length; i++)
- {
- counterSymbols++;
- if (jpegPicture.Length - 1 != i)
- {
- if (jpegPicture[i] != jpegPicture[i + 1])
- {
- if (counterSymbols > 3)
- {
- compressionSymbols += '§'.ToString() + counterSymbols + jpegPicture[i].ToString();
- counterSymbols = 0;
- }
- else
- {
- for (int a = 1; a <= counterSymbols; a++)
- {
- compressionSymbols += jpegPicture[i].ToString();
- }
- counterSymbols = 0;
- }
- }
- }
- else
- {
- if (jpegPicture.Length - 1 == i && counterSymbols <= 3)
- {
- for (int a = 1; a <= counterSymbols; a++)
- {
- compressionSymbols += jpegPicture[i].ToString();
- }
- }
- else
- {
- compressionSymbols += '§'.ToString() + counterSymbols + jpegPicture[i].ToString();
- }
- }
- }
- var pngPicture = compressionSymbols;
- Console.WriteLine(pngPicture);
- //var imageData = Console.ReadLine(); //Друго решение
- //var compressedData = new StringBuilder();
- //if (imageData.Length > 0)
- //{
- // int repeatingChars = 0;
- // for (int i = 0; i < imageData.Length; i++)
- // {
- // repeatingChars++;
- // if (i == imageData.Length - 1 || imageData[i] != imageData[i + 1])
- // {
- // if (repeatingChars >= 4)
- // {
- // compressedData.Append($"§{repeatingChars}{imageData[i]}");
- // repeatingChars = 0;
- // }
- // else
- // {
- // compressedData.Append(imageData[i], repeatingChars);//Така се добавя символа няколко пъти!
- // repeatingChars = 0;
- // }
- // }
- // }
- //}
- //Console.WriteLine(compressedData);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment