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)
Antworten:
Jelly ,
292625 BytesProbieren Sie es online!
Wie es funktioniert
quelle
;L3ḍƊ¡⁶µ⁶Øa;3ṗ¤,ðṚyZFs3⁸y
kann dasµ
Kohle , 39 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
Python 2 ,
180176174165163 BytesProbieren Sie es online!
Die Eingabe kann oben oder unten erfolgen. Die Ausgabe erfolgt in Großbuchstaben
quelle
Pyth,
3433 BytesVolles Programm. Die Eingabe wird als Kleinbuchstabe erwartet, die Ausgabe ist ein Zeichenarray. Versuchen Sie es online hier , oder prüfen Sie alle Testfälle auf einmal hier .
Alternative 34-Byte-Lösung:
sm@+G;id3csCm.[03jx+G;d3+W!%lz3zd3
- anstelle von +27 und Tail wird.[03
zum Auffüllen mit 0 bis Länge 3 verwendet. Kann 33 sein, wenn das Leadings
weggelassen wird.Bearbeiten: Ein Byte wurde durch Fallenlassen von führenden
s
Zeichen gespeichert, da Zeichenarrays eine gültige Ausgabe sindquelle
Ruby ,
153145138131 BytesProbieren Sie es online!
Ein schneller und naiver Ansatz, der mit Kleinbuchstaben arbeitet. Ein- und Ausgabe von Zeichenfeldern.
quelle
Java (JDK) , 192 Byte
Probieren Sie es online!
Sehr naiver Ansatz. Nimmt einen Kleinbuchstaben
char[]
als Eingabe, gibt aber a ausString
.Erklärungen
Credits
quelle
Integer.valueOf
nachByte.valueOf
undR+=c<26?(char)(c+97):' ';
nachR+=(char)(c<26?c+97:32);
R , 145 Bytes
Probieren Sie es online!
I / O als Strings; fügt ein Leerzeichen hinzu. Die seltsame Wiederholung von
[,3:1]
liegt daran, dass die natürliche Array-Indizierung von R etwas anders ist.quelle
APL + WIN, 102 Bytes
Erläuterung:
Beispiel eines Screenshots eines Testfalls:
quelle
SAS, 305 Bytes
Ein herzliches "Oof" für diese SAS-Monstrosität. Es gibt eine Menge zufälliger String-Formatierungen, von denen ich dachte, dass ich sie vermeiden könnte. Ich bin mir sicher, dass es dafür bessere Möglichkeiten gibt.
Die Eingabe erfolgt in Zeilenumbrüchen nach dem Kartenauszug wie folgt:
Gibt ein Dataset aus, das die Ausgabe in der Variablen
f
zusammen mit einer Reihe von Hilfsvariablen / Array-Werten enthält.Ungolfed / Erklärung:
quelle
JavaScript (Node.js) ,
146 141 139136 BytesI / O ist in Kleinbuchstaben.
Probieren Sie es online!
Kommentiert
quelle
(o=...,++i)%3
in JS? Ist(o,i)
ein Tupel oder so etwas und werden beide inneren Ganzzahlen in ihr Modulo-3 umgewandelt? Als Java-Entwickler verwirrt mich das immer noch ein bisschen(a,b)%c
. Gute Antwort! Mir gefällt, wie Sie jede dritte Ziffer konvertieren und dann die ersten beiden Null-Bytes entfernen. +1 von mir.++i
.05AB1E , 25 Bytes
Da noch niemand eine 05AB1E-Antwort gepostet hat, dachte ich, ich würde meine eigene Lösung posten. Ich sehe jetzt, dass es @ Dennis ♦ 'Jelly-Antwort sehr ähnlich ist , obwohl ich es mir selbst ausgedacht habe, bevor ich die Herausforderung gepostet habe.
Eingabe als String, Ausgabe als Liste von Zeichen. Fügt ein Leerzeichen hinzu, wenn die Länge durch 3 teilbar ist.
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Japt , 42 Bytes
Probieren Sie es online!
Der Kern dieser Antwort stammt aus einer gelöschten Antwort von Shaggy, aber er kam nie zurück, um Eingaben mit einer durch 3 teilbaren Länge zu verarbeiten, sodass dies eine feste Version ist .
Erläuterung:
quelle
C # (Visual C # Interactive Compiler) , 178 Byte
Probieren Sie es online!
Weniger Golf ... Es ist immer noch verwirrend :)
quelle