Tendo passado algum tempo neste site, passei a gostar de coisas o mais curtas possível. Essa pode ser a razão pela qual recentemente me ofendi com seqüências contendo os mesmos caracteres mais de uma vez. Seu trabalho é escrever uma função ou programa que condense uma determinada sequência de acordo com as seguintes regras:
Comece com uma condensação 0 , ou seja, procure o primeiro par (mais à esquerda) dos mesmos caracteres com 0 outros caracteres entre eles. Se esse par for encontrado, remova um dos dois caracteres e reinicie o algoritmo executando outra condensação 0 . Se nenhum par for encontrado, continue com a próxima etapa. Exemplos:
programming
-C0->programing
aabbcc
-C0->abbcc
test
-C0->test
Em seguida, execute uma condensação 1 , ou seja, procure o primeiro par de caracteres iguais com 1 outro caractere entre eles. Se esse par for encontrado, remova um deles e todos os caracteres entre eles e reinicie com uma condensação 0 . Se nenhum par for encontrado, continue com a próxima etapa. Exemplos:
abacac
-C1->acac
java
-C1->ja
Continue com uma condensação 2 e assim por diante até uma condensação n, com n sendo o comprimento da corda original, reiniciando cada vez que uma condensação remove algumas letras. Exemplos:
programing
-C2-> -C3-praming
abcdafg
>afg
A sequência resultante é chamada condensada e contém cada caractere no máximo uma vez.
Entrada:
Uma sequência minúscula de caracteres ascii imprimíveis.
Saída:
o corda condensada de acordo com as regras acima.
Exemplos:
examples -> es
programming -> praming
puzzles -> puzles
codegolf -> colf
andromeda -> a
abcbaccbabcb -> acb
if(x==1):x++ -> if(x+
fnabnfun -> fun
abcdefae -> abcde
Exemplos detalhados para esclarecer como o algoritmo funciona:
fnabnfun -C0-> fnabnfun -C1-> fnabnfun -C2-> fnfun -C0-> fnfun -C1-> fun -C0-> fun
-C1-> fun -C2-> ... -C8-> fun
abcbaccbabcb -C0-> abcbacbabcb -C0-> abcbacbabcb -C1-> abacbabcb -C0-> abacbabcb
-C1-> acbabcb -C0-> acbabcb -C1-> acbcb -C0-> acbcb -C1-> acb -C0-> acb
-C1-> ... -C12-> acb
Sua abordagem não precisa implementar o algoritmo de cima, desde que sua solução e o algoritmo retornem a mesma saída para todas as entradas permitidas. Este é um desafio do código-golfe .
Obrigado a @Linus pelos comentários úteis sobre o sandbox!