Einführung:
In einem Dokument, das ich als Kind zusammengestellt habe, sind viele verschiedene Chiffren gespeichert. Ich habe einige ausgewählt, die meiner Meinung nach am besten für Herausforderungen geeignet sind (nicht zu trivial und nicht zu schwierig), und sie in Herausforderungen umgewandelt. Die meisten von ihnen sind noch im Sandkasten und ich bin mir noch nicht sicher, ob ich sie alle oder nur einige veröffentlichen werde. Hier ist die zweite (die Computer-Chiffre war die erste, die ich veröffentlicht habe).
Bei der Trifid-Chiffre (ohne Verwendung eines Schlüsselworts) ist das Alphabet (und ein zusätzlicher Platzhalter) in drei 3 x 3-Tabellen unterteilt:
table 1: table 2: table 3:
|1 2 3 |1 2 3 |1 2 3
-+----- -+----- -+-----
1|a b c 1|j k l 1|s t u
2|d e f 2|m n o 2|v w x
3|g h i 3|p q r 3|y z
Ein Text, den wir verschlüsseln möchten, besteht aus Zeichen für Zeichen, die in Tabellenzeilenspaltennummern verschlüsselt sind. Zum Beispiel wird der Text this is a trifid cipher
:
t h i s i s a t r i f i d c i p h e r
table: 3 1 1 3 3 1 3 3 1 3 3 2 1 1 1 1 3 1 1 2 1 1 2
row: 1 3 3 1 3 3 1 3 1 3 1 3 3 2 3 2 3 1 3 3 3 2 3
column: 2 2 3 1 3 3 1 3 1 3 2 3 3 3 3 1 3 3 3 1 2 2 3
Dann setzen wir in der obigen Tabelle zeilenweise alles nacheinander in Dreiergruppen:
311 331 331 332 111 131 121 121 331 331 313 133 232 313 332 322 313 313 132 333 313 331 223
Und diese werden mithilfe derselben Tabellen wieder in Zeichen umgewandelt:
s y y z a g d d y y u i q u z w u u h u y o
Zu beachten ist, dass die Eingabelänge gleich 3 sein sollte. Wenn die Länge also ein Vielfaches von 3 ist, fügen wir ein oder zwei nachgestellte Leerzeichen hinzu, um die Eingabelänge nicht mehr zu einem Vielfachen von 3 zu machen.
Herausforderung:
sentence_to_encipher
Verschlüsseln Sie einen String wie oben beschrieben.
Sie müssen nur die angegebenen Daten verschlüsseln sentence_to_encipher
, sodass Sie auch kein Entschlüsselungsprogramm / keine Entschlüsselungsfunktion erstellen müssen. Ich könnte jedoch in Zukunft eine Herausforderung für Teil 2 für die Entschlüsselung darstellen (obwohl ich das Gefühl habe, dass es zu trivial / ähnlich zum Verschlüsselungsprozess ist).
Herausforderungsregeln:
- Sie können davon ausgehen, dass das
sentence_to_encipher
nur Buchstaben und Leerzeichen enthält. - Sie können entweder Kleinbuchstaben oder Großbuchstaben verwenden (bitte geben Sie an, welche Sie in Ihrer Antwort verwendet haben).
- Sie können entweder ein oder zwei nachgestellte Leerzeichen anhängen, wenn die Eingabelänge 3 ist, damit es kein Vielfaches von 3 mehr ist.
- I / O ist flexibel. Sowohl Eingabe als auch Ausgabe können eine Zeichenfolge, eine Liste / ein Array / ein Stream von Zeichen usw. sein.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln mit Standard-E / A-Regeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methoden mit den richtigen Parametern und vollständige Programme vom Rückgabetyp, verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu (z. B. TIO ).
- Außerdem wird dringend empfohlen, eine Erklärung für Ihre Antwort hinzuzufügen.
Testfälle:
Input: "this is a trifid cipher"
Output: "syyzagddyyuiquzwuuh uyo"
Input: "test"
Output: "utbk"
Input: "output"
Possible outputs: "rrvgivx" (one space) or "rrzcc lr" (two spaces)
Input: "trifidcipher"
Possible output: "vabbuxlzz utr" (one space) or "vabbyzv rx ie " (two spaces)