Ayant passé un peu de temps sur ce site, j'en suis venu à apprécier des choses aussi courtes que possible. C'est peut-être la raison pour laquelle je suis récemment offensé par les chaînes contenant les mêmes caractères plus d'une fois. Votre travail consiste à écrire une fonction ou un programme qui condense une chaîne donnée selon les règles suivantes:
Commencez avec une condensation 0 , c'est-à-dire recherchez la première paire (la plus à gauche) des mêmes caractères avec 0 autres caractères entre eux. Si une telle paire est trouvée, supprimez l'un des deux caractères et redémarrez l'algorithme en effectuant une autre condensation 0 . Si aucune de ces paires n'est trouvée, passez à l'étape suivante. Exemples:
programming
-C0->programing
aabbcc
-C0->abbcc
test
-C0->test
Ensuite, effectuez une condensation 1 , c'est-à-dire recherchez la première paire de mêmes caractères avec 1 autre caractère entre eux. Si une telle paire est trouvée, supprimez l'un d'eux et tous les caractères entre eux et redémarrez avec une condensation 0 . Si aucune de ces paires n'est trouvée, passez à l'étape suivante. Exemples:
abacac
-C1->acac
java
-C1->ja
Continuez avec une 2-condensation et ainsi de suite jusqu'à une n-condensation avec n étant la longueur de la chaîne d'origine, à chaque redémarrage après une condensation supprimée quelques lettres. Exemples:
programing
-C2->praming
abcdafg
-C3->afg
La chaîne résultante est appelée condensée et contient chaque caractère au plus une fois.
Contribution:
Une chaîne en minuscules de caractères ascii imprimables.
Sortie:
La chaîne condensée selon les règles ci-dessus.
Exemples:
examples -> es
programming -> praming
puzzles -> puzles
codegolf -> colf
andromeda -> a
abcbaccbabcb -> acb
if(x==1):x++ -> if(x+
fnabnfun -> fun
abcdefae -> abcde
Exemples détaillés pour clarifier le fonctionnement de l'algorithme:
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
Votre approche ne doit pas implémenter l'algorithme d'en haut tant que votre solution et l'algorithme renvoient la même sortie pour toutes les entrées autorisées. Il s'agit d'un défi de code-golf .
Merci à @Linus pour les commentaires utiles du bac à sable!