"Programming Challenges (The Programming Contest Training Manual)" ist wahrscheinlich eines der schönsten Übungsbücher über Algorithmen. Ich habe die ersten 11 Aufgaben gelöst, aber jetzt stecke ich beim "Crypt Kicker" Problem fest:
Krypto-Kicker
Eine gängige, aber unsichere Methode zur Verschlüsselung von Text besteht darin, die Buchstaben des Alphabets zu vertauschen. Mit anderen Worten: Jeder Buchstabe des Alphabets wird im Text konsequent durch einen anderen ersetzt. Um sicherzustellen, dass die Verschlüsselung umkehrbar ist, werden keine zwei Buchstaben durch denselben Buchstaben ersetzt.Ihre Aufgabe besteht darin, mehrere verschlüsselte Textzeilen zu entschlüsseln, wobei davon ausgegangen wird, dass jede Zeile einen anderen Satz von Ersetzungen verwendet und dass alle Wörter im entschlüsselten Text aus einem Wörterbuch mit bekannten Wörtern stammen.
Eingabe
Die Eingabe besteht aus einer Zeile mit einer ganzen Zahl n, gefolgt von n Wörtern in Kleinbuchstaben, eines pro Zeile, in alphabetischer Reihenfolge. Diese n Wörter bilden das Wörterbuch der Wörter, die in dem entschlüsselten Text vorkommen können.
Nach dem Wörterbuch folgen mehrere Zeilen mit Eingaben. Jede Zeile wird wie oben beschrieben verschlüsselt.Es gibt nicht mehr als 1.000 Wörter im Wörterbuch. Kein Wort besteht aus mehr als 16 Buchstaben. Die verschlüsselten Zeilen enthalten nur Kleinbuchstaben und Leerzeichen und dürfen nicht länger als 80 Zeichen sein.
Ausgabe
Entschlüsseln Sie jede Zeile und geben Sie sie auf der Standardausgabe aus. Wenn es mehrere Lösungen gibt, ist jede Lösung geeignet.
Wenn es keine Lösung gibt, ersetzen Sie jeden Buchstaben des Alphabets durch ein Sternchen.Beispielhafte Eingabe 6
y
dick
jane
puff
Punkt
yertlebjvg xsb hxsn xsb qymm xsb rqat xsb pnetfn
xxxx yyy zzzz www yyyy aaa bbbb ccc ddddddBeispielhafte Ausgabe
Dick und Jane und Puff und Spot und Yertle ...
Was Strategie Was sollte ich tun, um diese Aufgabe zu lösen? Ich dachte an eine klassische und brutale Backtracking-Lösung, aber ich versuche das zu vermeiden, bis ich etwas Intelligenteres finde.
PS: Dies hat nichts mit den Hausaufgaben zu tun, ich versuche nur, meine allgemeinen Fähigkeiten zu verbessern.