Pigpen-Verschlüsselung
Ihre Mission ist einfach: Schreiben eines Programms, das Text als Eingabe empfängt und eine ASCII-Darstellung davon in der Pigpen-Chiffre ausgibt .
Eingang
Nur ASCII-Zeichen (kein Unicode). Sie müssen in der Lage sein, mindestens 16384 Zeichen und 256 Zeilen zu verarbeiten.
Ausgabe
- Ersetzen Sie alle Zeichen, die keine neuen Zeilen oder in
ABCDEFGHIJKLMNOPQRSTUVWXYZ
oderabcdefghijklmnopqrstuvwxyz
durch Leerzeichen sind. - Ersetzen Sie jeden Buchstaben ohne Berücksichtigung der Groß- und Kleinschreibung durch seine verschlüsselte Form (siehe nächster Abschnitt) und fügen Sie in jede der drei Zeilen nach jeder ein Leerzeichen ein. Jedes codierte Zeichen ist ein 3 * 3-Block von ASCII-Kunst. Ersetzen Sie Leerzeichen durch 3 * 3 Leerzeichenblöcke.
- Alle Zeichen sollten sich in denselben drei Zeilen befinden (nennen Sie diese drei Zeilen eine Pigpen-Zeile), es sei denn, es gibt eine neue Zeile, die eine neue Pigpen-Zeile startet. Lassen Sie eine normale Linie zwischen den Schweinestalllinien leer.
Die Chiffre
| | | |
.| |.| |.
--+ for J +-+ for K +-- for L
--+ +-+ +--
.| |.| |.
--+ for M +-+ for N +-- for O
--+ +-+ +--
.| |.| |.
| for P | | for Q | for R
(ABCDEFGHI are the same as JKLMNOPQR, but with the . replaced by a space)
\./
V for W (note the row of 3 spaces on the top)
^
/.\ for Z (note the 3 spaces on the bottom)
\
.>
/ for X (note the leading spaces)
/
<.
\ for Y (note extra trailing spaces)
(STUV are like WXYZ, but with the . replaced by a space)
Beispiel
Die Eingabe "hEllo, wORLd" sollte Folgendes erzeugen:
+-+ +-+ | | +-- +-- +-- | --+
| | | | |. |. |. \./ |. |. |. |
| | +-+ +-- +-- +-- V +-- | +-- --+
Die base64-Codierung des obigen mit einer nachfolgenden neuen Zeile ist unten. Die md5sum ist 6f8ff1fed0cca4dd0492f9728ea02e7b
.
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW
ICArLS0gfCAgICstLSAtLSsK
Ohne eine nachfolgende neue Zeile lautet die md5sum 581005bef7ee76e24c019d076d5b375f
und die base64:
Ky0rICstKyB8ICAgfCAgICstLSAgICAgICAgICstLSArLS0gfCAgIC0tKwp8IHwgfCB8IHwuICB8
LiAgfC4gICAgICBcLi8gfC4gIHwuICB8LiAgICB8CnwgfCArLSsgKy0tICstLSArLS0gICAgICBW ICArLS0gfCAgICstLSAtLSs =
Regeln
- Standardlücken sind verboten.
- Das ist Code Golf. Der kürzeste Code gewinnt.
prompt()
Verwenden Sie in Sprachen, die nicht mehrere Eingabezeilen gleichzeitig akzeptieren können (z. B. JavaScript mit ),*
(oder ein anderes Zeichen) als Zeilentrennzeichen.
Erranda
- Dem Beispiel fehlten einige Leerzeichen (Ein Leerzeichen sollte aus den nachfolgenden Leerzeichen des vorherigen Zeichens, falls vorhanden, selbst und seinen eigenen nachfolgenden Leerzeichen bestehen). Dies wurde nun behoben.
prompt
für die Eingabe verwendet, akzeptiert jedoch nur eine einzelne Zeile. Könnte ich ein spezielles Zeichen (wie '*') verwenden, um eine neue Zeile in der Eingabe zu markieren?Antworten:
JavaScript (ES6) 312
327 340 372 446Ohne Leerzeichen und Zeilenumbrüche bei Einrückungen
- könnte mehr Golf gespielt werden. Verwenden Sie ein '*', um neue Zeilen in der Eingabe zu markieren, da diesprompt
eine einzelne Zeile akzeptiert.Test in der FireFox / FireBug-Konsole
Eingabe: ABCDEFGHI * JKLMNOPQR * STUV * WXYZ * HeLlO WoRlD!
quelle
o
undw
in "Hallo Welt", das OP hat nur 4C # -
921720Offensichtlich kein Gewinnerbeitrag, aber das sah nach zu viel Spaß aus, um es weiterzugeben :)
Das Programm nimmt die Eingabe einzeln auf und druckt dann den Schweinestall. Verwenden Sie zur Eingabe mehrerer Zeilen einen Unterstrich (_), wie in der Ausgabe dargestellt .
Code
Konzept
Die Chiffre verwendet einige Zeichenfolgen, die ziemlich oft dupliziert werden. Zum Beispiel wird '-' 16 Mal angezeigt und '__' (zwei Leerzeichen) wird 20 Mal angezeigt. Ich ersetze diese Sequenzen durch Einzelzeichensymbole und schalte sie zur Laufzeit aus, wobei ich die Anzahl der Zeichen, die zum Speichern der Pigpen-Chiffre erforderlich sind, halbiere. Ebenso erfordert eine neue Zeile normalerweise zwei Zeichen, wird jedoch durch ein Symbol (n) ersetzt und später ausgeschaltet.
Das Programm verarbeitet mehrere Eingabezeilen, indem es die Eingabe in ein Array aufteilt, in dem jedes Element eine einzelne Eingabezeile ist. Das Programm führt dann einfach die Verschlüsselung in jeder Zeile separat aus.
Dies ist mein erstes Golfspiel in einer beliebigen Sprache, daher kann wahrscheinlich viel getan werden, um diesen Code zu verbessern.
Ausgabe
quelle
for(int i=0;i<p.Length; i++)
(nahe der Mitte) zu gebenm♥lti \n lin♣e \n input
meinem Telefon wird dies so dargestellt, dass es ein Herz anstelle von u in multi und einen Club zwischen n und e in der Linie hat. Warum das?Python 2, 180 + 78 + 1 + 3 = 262 Zeichen
Das 180-Byte-Programm (die letzten beiden Zeilenumbrüche sind Registerkarten):
Erfordert, dass eine 78-Byte-Datei mit dem Namen 'f' dasselbe Verzeichnis ist (+1 Byte für Dateinamen), das Folgendes enthält:
Die base64-Codierung der Datei
f
lautet:Das Programm wird mit einer Ausnahme beendet und
2>_
unterdrückt den Fehler (+3 Byte):Erklärung :
Ich habe eine Nachschlagetabelle erstellt
L
, bei der es sich um eine Zuordnung handelt{position_in_3x3_block: {letter_being_encrypted: symbol_for_letter_at_position}}
, die in einem flachen Array gespeichert ist. Das Programm druckt die Buchstaben, indem es für jede Position eine einfache Suche durchführt.quelle
f
und drei Bytes für2>_
Perl 5
-lF
,297 288 261231 BytesProbieren Sie es online aus!
Es gibt hier wahrscheinlich noch ein bisschen, das weiter golfen könnte.
quelle