Avendo trascorso un po 'di tempo su questo sito, sono venuto a godermi le cose il più breve possibile. Questo potrebbe essere il motivo per cui recentemente sono stato offeso dalle stringhe contenenti gli stessi caratteri più di una volta. Il tuo compito è scrivere una funzione o un programma che condensa una determinata stringa in base alle seguenti regole:
Inizia con una condensazione 0 , ovvero cerca la prima coppia (più a sinistra) degli stessi caratteri con altri 0 caratteri tra di loro. Se viene trovata una tale coppia, rimuovere uno dei due caratteri e riavviare l'algoritmo eseguendo un'altra 0-condensa . Se non viene trovata tale coppia, procedere con il passaggio successivo. Esempi:
programming-C0->programing
aabbcc-C0->abbcc
test-C0->testQuindi esegui 1 condensazione , ovvero cerca la prima coppia di stessi personaggi con 1 altro carattere tra di loro. Se viene trovata una tale coppia, rimuovine uno e tutti i caratteri tra loro e riavvia con una condensazione 0 . Se non viene trovata tale coppia, procedere con il passaggio successivo. Esempi:
abacac-C1->acac
java-C1->jaContinuare con una condensa 2 e così via fino a una condensa con n che sia la lunghezza della stringa originale, ogni volta il riavvio dopo una condensa rimuove alcune lettere. Esempi:
programing-C2->praming
abcdafg-C3->afg
La stringa risultante si chiama condensata e contiene ogni carattere al massimo una volta.
Ingresso:
Una stringa in minuscolo di caratteri ASCII stampabili.
Produzione:
La stringa condensata secondo le regole sopra.
Esempi:
examples -> es
programming -> praming
puzzles -> puzles
codegolf -> colf
andromeda -> a
abcbaccbabcb -> acb
if(x==1):x++ -> if(x+
fnabnfun -> fun
abcdefae -> abcde
Esempi dettagliati per chiarire come funziona l'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
Il tuo approccio non deve implementare l'algoritmo dall'alto fintanto che la tua soluzione e l'algoritmo restituiscono lo stesso output per tutti gli input consentiti. Questa è una sfida di code-golf .
Grazie a @Linus per i commenti utili sulla sandbox!