A. RLE Архиватор - 1
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Строка символов архивируется так: <количество><символ><количество><символ>...

Выведите заархивированную строку, содержащую наименьше число таких групп.

Входные данные

На вход подается единственная строка s (|s|105), состоящая только из строчных латинских символов.

Выходные данные

Выведите в единственной строке результат архивации.

Примеры

Входные данные
aaabbbbbbbbbbbbdccc
Выходные данные
3a12b1d3c
Входные данные
aaabbbbacaa
Выходные данные
3a4b1a1c2a
Входные данные
aaabbbccc
Выходные данные
3a3b3c

B. RLE Разархиватор - 1
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Дана строка - результат работы архиватора из прошлой задачи. Разархивируйте ее.

Входные данные

На вход подается единственная строка s (|s|105), состоящая только из строчных латинских символов.

Выходные данные

Выведите в единственной строке результат архивации. Гарантируется, что размер ответа не превосходит 105

Примеры

Входные данные
3a12b1d3c
Выходные данные
aaabbbbbbbbbbbbdccc
Входные данные
3a4b1a1c2a
Выходные данные
aaabbbbacaa
Входные данные
3a3b3c
Выходные данные
aaabbbccc

C. RLE Архиватор - 2
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Строка символов кодируется так: <число><символ><число><символ>

Каждое число должно иметь размер 1 байт, то есть состоять не более, чем из 8 бит. Число говорит сколько раз надо повторить следующий за ним символ. Таким образом мы можем закодировать длины повторений (последовательностей) от 1 до 256 (число 0 соответствует 1 повторению, 1 - двум и так далее, 255 - 256 повторениям). Любую группу из одинаковых символов обязательно сжимать используя повторения. Если группа состоит из более, чем 256 символов, она бьется на несколько групп длиной 256 и последней группы, которая может иметь длину меньше 256.

Выведите строку после архивации.

Входные данные

На вход подается единственная строка s (|s|2105), состоящая только из заглавных латинских символов и цифр. Каждая пара символов кодирует один байт - пара символов это число в 16-ричной системе системе счисления

Выходные данные

Выведите в единственной строке результат архивации.

Примеры

Входные данные
616161626262636363
Выходные данные
026102620263
Входные данные
61616262
Выходные данные
01610162
Входные данные
61616162626262626262626262626264636363
Выходные данные
02610B6200640263

D. RLE Разархиватор - 2
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Дана строка - результат работы архиватора из прошлой задачи. Разархивируйте ее.

Входные данные

На вход подается единственная строка s (|s|2105), состоящая только из строчных латинских символов.

Выходные данные

Выведите в единственной строке результат архивации. Гарантируется, что размер ответа не превосходит 2105

Примеры

Входные данные
026102620263
Выходные данные
616161626262636363
Входные данные
01610162
Выходные данные
61616262
Входные данные
02610B6200640263
Выходные данные
61616162626262626262626262626264636363

E. RLE Архиватор-3
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Строка символов кодируется так: <число><символ><число><символ>

Каждое число должно иметь размер 1 байт, то есть, состоять не более, чем из 8 бит. Пусть x - старший бит числа, а y - число, состоящее из 7 младших бит. Тогда если x=1, то дальше будет идти последовательность из y+1 символа, которую надо повторить 1 раз, иначе далее будет идти один символ, который надо повторить y+1 раз. Таким образом мы можем закодировать длины повторений (или последовательностей) от 1 до 128. Строку надо сжать так, чтобы ее длина после архивации была наименьшей возможной.

Входные данные

Дана строка s (|s|2105).

Выходные данные

Выведите строку после архивации.

Примеры

Входные данные
616161626262636363
Выходные данные
026102620263
Входные данные
61616262
Выходные данные
01610162
Входные данные
61616162626262626262626262626264636363
Выходные данные
02610B6280640263

F. RLE Разрхиватор-3
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Дана строка - результат работы архиватора из прошлой задачи. Разархивируйте ее.

Входные данные

Дана строка s (|s|2105).

Выходные данные

Выведите строку после разархивации.

Пример

Входные данные
026102620263
Выходные данные
616161626262636363

G. RLE Файловый архиватор-3
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
input.dat
вывод
output.dat

Сделайте то же, что в задаче Е, только с файлами.

Выходные данные

Получите архивированный файл.

Пример

Входные данные
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Выходные данные
#A

Примечание

Нельзя читать весь файл в память сразу.

H. RLE Файловый разрхиватор-3
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
input.dat
вывод
output.dat

Дан файл - результат работы архиватора из задачи G. Разархивируйте его.

Выходные данные

Получите разархивированный файл.

Примечание

Нельзя читать весь файл в память сразу.

I. Битовый RLE архиватор
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
input.dat
вывод
output.dat

Битовую последовательность можно кодировать способом RLE так: количество единиц, количество нулей, количество единиц, количество нулей... Такое кодирование очень хорошо подходит, например, для сжатия монохромных изображений, в которых каждый пиксель кодируется всего одним битом. В этом случае обычно возникают длинные последовательности подряд идущих нулей и подряд идущих единиц.

Для того, чтобы кодирование было эффективным и было возможно легко раскодировать длины последовательностей кодируются фиксированным количеством бит k. В случае, если ntreofz последовательность длиннее 2k1, добавляют нули, например, при кодировании последовательности 00001000 числами длиной два бита (в этом случае можно закодировать длины 0, 1, 2 и 3) код будет таким: 0 3 0 1 1 3, или в двоичной записи 00 11 00 01 01 11. (Да, на таком коротком примере файл раздувается.)

Закодируйте файл. В начало файла запишите k в четырех битах. Это позволит кодировать длины последовательностей от 0 до 2151. Таким образом, ответ для 00001000 при k=2 будет таким: 0010 00 11 00 01 11 01

Входные данные

Дан файл. Число k определяется как остаток от длины файла при делении на 10 плюс 2.

Выходные данные

Закодируйте файл в требуемом формате.

k в задании из примера в условии получается 3 (1 % 10 + 2)

Полностью ответ получается таким:

0011 000 100 001 011 (0 4 1 3) 0000

Таким образом В 16-м виде (проверяйте, например, в hexed.it или другом hex-редакторе)

из 08 получается 03 10 B0

Пример

Входные данные
C
Выходные данные
0L@

Примечание

Для решения задачи напишите классы для чтения одного бита из потока ввода и записи одного бита в поток вывода, а так же запись числа при помощи k бит.

J. Битовый RLE разархиватор
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
256 мегабайт
ввод
input.dat
вывод
output.dat

Раскодируйте файл, закодированный по алгоритму предыдущей задачи.

Выходные данные

Примечание

Для решения задачи добавьте в класс битового потока ввода чтения числа из следующих k бит.