Nachdem ich einige Zeit auf dieser Seite verbracht habe, habe ich es genossen, Dinge so kurz wie möglich zu halten. Das mag der Grund sein, warum ich in letzter Zeit von Strings beleidigt bin, die dieselben Zeichen mehr als einmal enthalten. Ihre Aufgabe ist es, eine Funktion oder ein Programm zu schreiben, das einen bestimmten String nach folgenden Regeln komprimiert :
Beginnen Sie mit einer 0-Verdichtung , dh suchen Sie nach dem ersten (am weitesten links stehenden) Paar derselben Zeichen mit 0 anderen Zeichen dazwischen. Wenn ein solches Paar gefunden wird, entfernen Sie eines der beiden Zeichen und starten Sie den Algorithmus neu, indem Sie eine weitere 0-Kondensation durchführen . Wird kein solches Paar gefunden, fahren Sie mit dem nächsten Schritt fort. Beispiele:
programming-C0->programing
aabbcc-C0->abbcc
test-C0->testFühren Sie dann eine 1-Verdichtung durch , dh suchen Sie nach dem ersten Zeichenpaar mit 1 weiteren Zeichen dazwischen. Wenn ein solches Paar gefunden wird, entfernen Sie eines von ihnen und alle Zeichen zwischen ihnen und starten Sie mit einer 0-Verdichtung neu . Wird kein solches Paar gefunden, fahren Sie mit dem nächsten Schritt fort. Beispiele:
abacac-C1->acac
java-C1->jaFahren Sie mit einer 2-Kondensation fort und so weiter bis zu einer n-Kondensation, wobei n die Länge der ursprünglichen Zeichenfolge ist. Bei jedem Neustart nach einer Kondensation werden einige Buchstaben entfernt. Beispiele:
programing-C2->praming
abcdafg-C3->afg
Die resultierende Zeichenfolge heißt komprimiert und enthält jedes Zeichen höchstens einmal.
Eingang:
Eine Kleinbuchstabenfolge aus druckbaren ASCII-Zeichen.
Ausgabe:
Die verkürzte Zeichenfolge gemäß den obigen Regeln.
Beispiele:
examples -> es
programming -> praming
puzzles -> puzles
codegolf -> colf
andromeda -> a
abcbaccbabcb -> acb
if(x==1):x++ -> if(x+
fnabnfun -> fun
abcdefae -> abcde
Detaillierte Beispiele zur Verdeutlichung der Funktionsweise des Algorithmus:
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
Ihr Ansatz muss den Algorithmus nicht von oben implementieren, solange Ihre Lösung und der Algorithmus für alle zulässigen Eingaben dieselbe Ausgabe zurückgeben. Dies ist eine Code-Golf- Herausforderung.
Vielen Dank an @Linus für hilfreiche Sandbox-Kommentare!