Geben Sie bei Eingabe eines gültigen Glypho- Programms dessen "lesbares" Gegenstück aus.
Glypho ist eine interessante Esolang-Idee:
Die Anweisungsreferenz wird hier gegeben. Für jeden Befehl stehen die Zeichen abcd für die Symbole, aus denen jeder Befehl besteht. a bezieht sich auf das erste eindeutige Symbol, b bezieht sich auf das zweite eindeutige Symbol usw.
aaaa ..... n NOP - no operation; do nothing aaab ..... i Input - push input onto top of stack aaba ..... > Rot - pops top stack element and pushes to bottom of stack aabb ..... \ Swap - swaps top two stack elements aabc ..... 1 Push - pushes a 1 onto the top of stack (creates new element) abaa ..... < RRot - pops bottom element and pushes to top of stack abab ..... d Dup - Duplicates top stack element abac ..... + Add - pops top two elements and pushes their sum abba ..... [ L-brace - skip to matching ] if top stack element is 0 abbb ..... o Output - pops and outputs top stack element abbc ..... * Multiply - pops top two elements and pushes their product abca ..... e Execute - Pops four elements and interprets them as an instruction abcb ..... - Negate - pops value from stack, pushes -(value) abcc ..... ! Pop - pops and discards top stack element abcd ..... ] R-brace - skip back to matching [
(Kredit: Brian Thompson aka Wildhalcyon)
So PPCG
würde zum Beispiel die Push- Anweisung dargestellt - PPCG
entspricht dem Muster aabc
, wobei a
darstellt P
, b
darstellt C
und c
darstellt G
.
Die Eingabe ist eine einzelne Zeichenfolge, die nur aus druckbaren ASCII-Zeichen besteht. Es wird immer eine Länge haben, die durch vier (duh) teilbar ist.
Die Ausgabe ist jede Gruppe von vier Zeichen in der Eingabezeichenfolge, die durch die von ihnen angegebene Anweisung ersetzt wird. Verwenden Sie die aus einem Buchstaben bestehenden Anweisungsnamen (die in der obigen Tabelle nach den fünf Punkten stehen).
Da es sich um Code-Golf , wird der kürzeste Code in Bytes gewinnen.
Testfälle:
In Out
------------------------------------------------
Programming Puzzles & Code Golof ]!]!]]]+
nananananananana batman! dddd]]
;;;;;;;:;;:;;;:: ni>\
llamas sleep 1-*
8488133190003453 <[oe
<empty string> <empty string>
Antworten:
Pyth,
373534 BytesDer Code enthält nicht druckbare Zeichen. Hier ist der
xxd
Hexdump:Hier ist eine druckbare Version mit 36 Bytes:
Probieren Sie es online aus. Testsuite.
Erläuterung
quelle
CJam,
423935 BytesSparte 4 Bytes und borgte die Idee von user81655 aus, Base 3 anstelle von Base 4 zu verwenden.
Führen Sie alle Testfälle aus.
Es muss eine bessere Möglichkeit geben, die Nachschlagetabelle der Befehle zu komprimieren ...
quelle
JavaScript (ES6), 97
Für jeden Block mit 4 Zeichen ersetze ich jedes Symbol durch seine Position im Block und erhalte eine Zahl zur Basis 4. Zum Beispiel
'aabc' -> '0023'
. Die möglichen Zahlen liegen im Bereich von 0..0123, dh 0..27 in Dezimalzahl. Ich benutze die Zahl als Index, um das richtige Anweisungszeichen aus einer Zeichenfolge mit 28 Zeichen zu finden.Prüfung
quelle
MATLAB, 291 Bytes
Ich habe ziemlich lange gezögert, ob ich meine Antwort begehen sollte. Ich habe nur mit MATLAB rumgespielt. Mir ist bewusst, dass es nicht wirklich möglich ist, dichten Code zu generieren (eine geringe Anzahl von Anweisungen / Bytes; ungefähr dreimal so groß wie Ihre ~ 100-Byte-Lösungen), und dass MATLAB möglicherweise nicht zu gut für Code-Golf geeignet ist und ich neu im Code-Golf bin . Aber ich wollte es einfach versuchen, und der Code funktioniert (Zeilenumbrüche bleiben erhalten). Hinweise sind willkommen. : P
quelle
JavaScript (ES6),
115 bis101 Byte14 Bytes gespart dank @ edc65 !
Erläuterung
Speichert die Anweisungsliste in einer Zeichenfolge mit jedem Zeichen im Index zur Basis 3. Entspricht beispielsweise dem,
+
wasabac
in Basis 3 als0102
oder11
in Dezimal dargestellt werden kann. Der einzige Befehl, der in der Basis 3 nicht dargestellt werden kann, ist]
, dass der Algorithmus, der zur Berechnung der Basis 3-Zahl verwendet wird, am Ende der Zeichenfolge auf Position 18 stehen muss.Prüfung
Code-Snippet anzeigen
quelle
parseInt
die Zahl nicht verwenden und mit der wiederholten Summe berechnen und multiplizieren. So vermeiden Sie das Problem mit '0123', das in Basis 3 ungültig ist, aber 1 * 9 + 2 * 6 + 3 == 18 ergibt, was eine gute Position ist. Ergebnis:F=s=>s.replace(/..../g,g=>"ni]>\\1 <d+[o*e-!]"[[...g].map(c=>r=r*3+(m[c]=m[c]||++i)-1,r=i=0,m={})|r])
Python 2, 158 Bytes
Nimmt Eingaben wie
"test"
. Die Ausgabe ist eine Liste von Zeichen.Probieren Sie es online aus
Ungolfed:
quelle