Всім відомо, що таке кодування довжиною пробігу. Це вже було предметом багатьох проблем із кодовим гольфом. Ми розглянемо певну варіацію.
Приклад
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
не було закодовано, оскільки кодування його (1(3)
) не коротше.- Рядок
444111
виникає 3 рази, тому він закодований. 676767
не було закодовано, оскільки((67)(4))
довше, ніж раніше.222222277777222222277777
не було закодовано як((222222277777)(2))
. Чому? Тому що222222277777
себе можна звести до2(7)7(5)
.123123123123
не закодовано, оскільки ваша програма повинна обробляти пробіги з двох символів, а не трьох.
Це є код-гольфтому виграє найкоротший код. Автоматичний вимикач - це раннє подання.
Якщо я щось пропустив або якщо ви нічого не знаєте, будь ласка, повідомте мене в коментарях.
441444144414
-> ((4414)(3))
?
4414
технічно це серія 4. Моя формулювання просто погана.
111111111
можна закодувати як (1)(9)
?
67
с.