Después de pasar un tiempo en este sitio, he llegado a disfrutar de que las cosas sean lo más cortas posible. Esa puede ser la razón por la que recientemente me ofenden las cadenas que contienen los mismos caracteres más de una vez. Su trabajo es escribir una función o programa que condense una cadena dada de acuerdo con las siguientes reglas:
Comience con una condensación 0 , es decir, busque el primer par (más a la izquierda) de los mismos caracteres con otros 0 caracteres entre ellos. Si se encuentra dicho par, elimine uno de los dos caracteres y reinicie el algoritmo realizando otra condensación 0 . Si no se encuentra dicho par, continúe con el siguiente paso. Ejemplos:
programming
-C0->programing
aabbcc
-C0->abbcc
test
-C0->test
Luego realice una 1 condensación , es decir, busque el primer par de mismos caracteres con 1 otro personaje entre ellos. Si se encuentra dicho par, elimine uno de ellos y todos los caracteres entre ellos y reinicie con una condensación 0 . Si no se encuentra dicho par, continúe con el siguiente paso. Ejemplos:
abacac
-C1->acac
java
-C1->ja
Continúe con una 2-condensación y así sucesivamente hasta una n-condensación con n siendo la longitud de la cadena original, reiniciando cada vez después de que una condensación elimine algunas letras. Ejemplos:
programing
-C2->praming
abcdafg
-C3->afg
La cadena resultante se llama condensada y contiene cada carácter como máximo una vez.
Entrada:
Una cadena en minúscula de caracteres ascii imprimibles.
Salida:
La cadena condensada de acuerdo con las reglas anteriores.
Ejemplos:
examples -> es
programming -> praming
puzzles -> puzles
codegolf -> colf
andromeda -> a
abcbaccbabcb -> acb
if(x==1):x++ -> if(x+
fnabnfun -> fun
abcdefae -> abcde
Ejemplos detallados para aclarar cómo funciona el algoritmo:
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
Su enfoque no tiene que implementar el algoritmo desde arriba siempre que su solución y el algoritmo devuelvan la misma salida para todas las entradas permitidas. Este es un desafío de código de golf .
¡Gracias a @Linus por los útiles comentarios de sandbox!