Hier sind die Buchstaben des englischen Alphabets nach Häufigkeit sortiert:
e t a o i n s h r d l c u m w f g y p b v k j x q z
Dies ist e
der am häufigsten verwendete und am seltensten verwendete Buchstabe z
. (Daten aus Wikipedia .)
Ihre Herausforderung besteht darin, einen Text mit der Aufschrift ROT-n zu verwenden, z. B .:
ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Dies ist der Text "thisisaverysecretmessagethatisverysecureandsafe", der über ROT-21 (Hälfte von 42) "verschlüsselt" wird. Ihr Programm sollte anhand der obigen Häufigkeitstabelle feststellen können, um wie viel jedes Zeichen gedreht wurde und um wie viel der Originaltext gedreht wurde.
(Wenn Sie mit ROT-n nicht vertraut sind, verschiebt es im Wesentlichen jedes Zeichen um n
. Zum Beispiel in ROT-2,. a -> c, b -> d, ..., x -> z, y -> a, z -> b
)
Wie, fragst du? Der (sehr naive) Algorithmus, den Sie verwenden müssen, ist:
- Wenden Sie für jedes
n
von0
bis25
einschließlich ROT--n
auf die Eingabezeichenfolge an. (Negativ,n
weil wir die Verschlüsselung umkehren möchten . ROT--n
entspricht ROT-26-n
, falls dies einfacher ist.) - Konvertieren Sie jede Eingabezeichenfolge in eine Zahl, indem Sie die relativen Häufigkeiten der Zeichen addieren.
e
ist0
,t
ist1
,a
ist2
usw. Beispielsweise ist die entsprechende Nummer für die Zeichenfolge"hello"
7 + 0 + 10 + 10 + 3 = 30. - Suchen Sie die Zeichenfolge mit der niedrigsten entsprechenden Nummer.
- gib diesen String und den dazugehörigen aus
n
.
Regeln:
- Die Eingabe kann überall sinnvoll sein (STDIN, Funktionsargumente, aus einer Datei usw.) und kann daher ausgegeben werden (STDOUT, Funktionsrückgabewert, in eine Datei usw.).
- Sie können einen anderen Algorithmus verwenden, sofern er immer zu identischen Ergebnissen führt. Zum Beispiel ist es auch in Ordnung
z
, 0 unde
25 zu sein und die höchste Zahl zu wählen. - Wenn zwei Zeichenfolgen identische Noten haben, können Sie eine (oder beide) ausgeben. Dies ist ein Randfall und Sie müssen ihn nicht berücksichtigen.
- Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes!
Testfälle:
Eingabe: ocdndnvqzmtnzxmzohznnvbzocvodnqzmtnzxpmzviynvaz
Ausgabe:21 thisisaverysecretmessagethatisverysecureandsafe
Eingabe: pmttwxmwxtmwnxzwoziuuqvoxchhtmakwlmowtnabiksmfkpivom
Ausgabe:8 hellopeopleofprogrammingpuzzlescodegolfstackexchange
Eingabe: ftueimeqzodkbfqpiuftdaffiqxhqeaufygefnqbqdrqofxkemrq
Ausgabe:12 thiswasencryptedwithrottwelvesoitmustbeperfectlysafe
Eingabe: jgtgkuvjghkpcnvguvecugvjcvaqwowuvfgetarv
Ausgabe:2 hereisthefinaltestcasethatyoumustdecrypt
Für den Fall, dass Sie sich wundern, hier ist eine JSFiddle des JavaScript-Testcodes, den ich geschrieben habe, die alle Testfälle, die ich darauf geworfen habe, erfolgreich entschlüsselt hat.
wtaad
sollte0 wtaad
als Ergebnis geben, undvszzc
sollte25 wtaad
als Ergebnis geben.