Все знают, что такое кодирование длин серий. Это уже было предметом многих испытаний в гольф-коде. Мы будем смотреть на определенный вариант.
пример
Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322
Число в скобках указывает, сколько раз встречался предыдущий символ. В этом примере были закодированы только серии из 5 или более символов. Это потому, что кодирование выполняется 4 или меньше, не улучшает количество символов.
Вызов
Напишите функцию / программу, которая реализует этот вариант кодирования длин серий, но также может кодировать серии из двух символов. Ряды двух символов также должны быть заключены в круглые скобки. Группа также будет заключена в круглые скобки. Ваша программа должна принять строку в качестве входных данных и вывести измененную строку с изменениями, которые сокращают строку.
пример
Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123
Ноты
111
не был закодирован, потому что кодировка it (1(3)
) не короче.- Строка
444111
встречается 3 раза, поэтому она кодируется. 676767
не был закодирован, потому что((67)(4))
длиннее, чем раньше.222222277777222222277777
не был закодирован как((222222277777)(2))
. Почему? Потому что222222277777
сам можно свести к2(7)7(5)
.123123123123
не закодирован, потому что ваша программа должна обрабатывать два символа, а не три.
Это Код-гольфтак короткий код выигрывает. Тай-брейк является ранней подачей.
Если я что-то пропустил или если вы в чем-то не уверены, сообщите мне об этом в комментариях.
67
с.441444144414
->((4414)(3))
?4414
это технически серия 4. Моя формулировка просто плохая.111111111
быть закодирован как(1)(9)
?Ответы:
Сетчатка, 162 байта
Попробуйте онлайн!
источник
10101010100100100100100
, вывод будет((10)(5))0((100)(4))
еще на((10)(4))((100)(5))
один символ короче.