Todo mundo sabe o que é codificação em tamanho de execução. Já foi objeto de muitos desafios de código-golfe. Veremos uma certa variação.
Exemplo
Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322
O número entre parênteses especifica o número de vezes que o símbolo anterior ocorreu. No exemplo, apenas execuções de 5 ou mais caracteres foram codificadas. Isso ocorre porque a codificação de 4 ou menos não melhora a contagem de caracteres.
Desafio
Escreva uma função / programa que implemente essa variação da codificação de comprimento de execução, mas também possa codificar execuções de dois símbolos. As execuções de dois símbolos também devem estar entre parênteses. Um grupo também será colocado entre parênteses. Seu programa deve aceitar uma sequência como entrada e gerar a sequência modificada com modificações que encurtam a sequência.
Exemplo
Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123
Notas
111
não foi codificado porque codificá-lo (1(3)
) não é mais curto.- A cadeia
444111
ocorre 3 vezes e é codificada. 676767
não foi codificado porque((67)(4))
é mais longo do que antes.222222277777222222277777
não foi codificado como((222222277777)(2))
. Por quê? Porque em222222277777
si pode ser reduzido a2(7)7(5)
.123123123123
não é codificado porque seu programa deve lidar com execuções de dois símbolos, não três.
Isso é código-golfe, então o código mais curto vence. O desempate é finalização antecipada.
Se eu perdi alguma coisa, ou se você não tiver certeza, notifique-me nos comentários.
67
s.441444144414
->((4414)(3))
?4414
é tecnicamente uma série de 4. Minha redação é ruim.111111111
ser codificado como(1)(9)
?Respostas:
Retina, 162 bytes
Experimente online!
fonte
10101010100100100100100
, a saída é((10)(5))0((100)(4))
, ainda assim,((10)(4))((100)(5))
seria um caractere menor.