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
111não foi codificado porque codificá-lo (1(3)) não é mais curto.- A cadeia
444111ocorre 3 vezes e é codificada. 676767não foi codificado porque((67)(4))é mais longo do que antes.222222277777222222277777não foi codificado como((222222277777)(2)). Por quê? Porque em222222277777si pode ser reduzido a2(7)7(5).123123123123nã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.
441444144414-> ((4414)(3))?
4414é tecnicamente uma série de 4. Minha redação é ruim.
111111111ser codificado como (1)(9)?
67s.