Todos saben qué es la codificación de longitud de ejecución. Ya ha sido objeto de muchos desafíos de código de golf. Vamos a ver una cierta variación.
Ejemplo
Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322
El número entre paréntesis especifica la cantidad de veces que ocurrió el símbolo anterior. En el ejemplo, solo se codificaron series de 5 o más caracteres. Esto se debe a que las codificaciones de 4 o menos no mejoran el recuento de caracteres.
Desafío
Escriba una función / programa que implemente esta variación de codificación de longitud de ejecución, pero que también pueda codificar ejecuciones de dos símbolos. Las corridas de dos símbolos también deben estar entre paréntesis. Un grupo también estará encerrado entre paréntesis. Su programa debe aceptar una cadena como entrada y generar la cadena modificada con modificaciones que acorten la cadena.
Ejemplo
Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123
Notas
111
no se codificó porque codificarlo (1(3)
) no es más corto.- La cadena se
444111
produce 3 veces, por lo que está codificada. 676767
no se codificó porque((67)(4))
es más largo que antes.222222277777222222277777
no fue codificado como((222222277777)(2))
. ¿Por qué? Porque222222277777
se puede reducir a sí mismo2(7)7(5)
.123123123123
no está codificado porque se supone que su programa maneja corridas de dos símbolos, no tres.
Este es el código de golf, por lo que gana el código más corto. El desempate es la presentación temprana.
Si me perdí algo, o si no está seguro de algo, notifíqueme en los comentarios.
67
s.441444144414
->((4414)(3))
?4414
es técnicamente una serie de 4. Mi redacción es simplemente mala.111111111
puede codificar como(1)(9)
?Respuestas:
Retina, 162 bytes
Pruébalo en línea!
fuente
10101010100100100100100
, la salida es((10)(5))0((100)(4))
, sin embargo,((10)(4))((100)(5))
sería un carácter más corto.