Zusammenfassung
Es wurde eine neue Sprache zur Manipulation von Zeichenfolgen erstellt, in der nur die Zeichen verwendet werden $+#-!*|@>
! Ihre Aufgabe ist es, einen Interpreter dafür in möglichst wenigen Bytes zu implementieren.
Eingang
Eine Zeichenfolge, die eine einzelne Zeile dieser Sprache ist. Dies kann auf jede vernünftige Weise (stdin, Funktionsparameter, Befehlszeilenargument usw.) oder als vordefinierte Variable erfolgen. Wenn das Programm nach Benutzereingaben fragt, akzeptieren Sie alle Benutzereingaben, die es von stdin verlangt, und nichts weiter, siehe unten. Sie können davon ausgehen, dass es sich um ein gültiges Programm handelt.
Ausgabe
Was auch immer die Sprache ausgeben würde, Spezifikationen unten. Sie müssen eine Zeichenfolge auf eine vernünftige Weise (Standardausgabe, Funktionsausgabe usw.) oder einen variablen Wert ausgeben. Wenn die Sprache explizit ausgegeben wird, muss dies zu stdout gehen. Standardlücken sind verboten.
Sprachspezifikationen
Verarbeitung und Syntax
Die Sprache hat eine sehr einfache Form der Verarbeitung, da nur Zeichenfolgen bearbeitet werden: Sie beginnt mit einer leeren Zeichenfolge ( ""
) und ändert sie mit jedem Begriff. Ein Begriff besteht aus einem oder zwei Teilen: einer Funktion (unten), gefolgt von möglicherweise einem Parameter (unten), der sein Verhalten bearbeitet. Begriffe werden durch Pipes ( |
) getrennt. Sie können davon ausgehen, dass es sich nicht um ein leeres Programm handelt und kein Begriff leer ist. Sie sollten den Wert am Ende des Programms ausgeben.
Funktionen
Die Sprache hat nur 6 Funktionen, wie unten gezeigt. Jede Funktion akzeptiert entweder einen oder null Parameter.
+
Zeichenfolgen verketten (nimmt einen Zeichenfolgenparameter und verkettet ihn mit dem aktuellen Wert)!
kehre die Zeichenreihenfolge des aktuellen Wertes um (kein Parameter)*
Wiederholen Sie die Zeichenfolge (nimmt einen ganzzahligen Parameter und wiederholt den aktuellen Wert so oft)-
Entfernt alle Vorkommen eines Werts (nimmt einen Zeichenfolgenparameter, entfernt alle Vorkommen davon aus dem aktuellen Wert)$
[pseudo-] mischt zufällig den aktuellen Wert (kein Parameter)<
Ausgabe des aktuellen Wertes anstdout
(keine Parameter)
Werte
Dies sind die Werte, die an Funktionen übergeben werden können, dargestellt durch einen regulären Ausdruck, der mit ihnen übereinstimmt:
@[^|]*
Ein String-Literal, einschließlich aller anderen Zeichen als Pipes. Es kann leer sein.#[0-9]+
ein ganzzahliges Literal>
die nächste Zeile vonstdin
. Bei Verwendung mit*
in Ganzzahl konvertieren.
Testfälle
╔════════════════════════╤═════════════╤══════════════╗
║code │input │output ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|!|+@hello|*> │13 │31hello31hello║
║ │2 │ ║
╟────────────────────────┼─────────────┼──────────────╢
║+>|+@abcdefg|$ │hello │hcloeebafdlg ║
╟────────────────────────┼─────────────┼──────────────╢
║+@how areyou|-@o|-> │w │h areyu ║
╟────────────────────────┼─────────────┼──────────────╢
║+@out|<|*#3 │ │out ║
║ │ │outoutout ║
╟────────────────────────┼─────────────┼──────────────╢
║+> │what ever 345│what ever 345 ║
╟────────────────────────┼─────────────┼──────────────╢
║+@$pe<i@l|<|-@$pe<i@l|+>│A|$o $pe<!@| │$pe<i@l ║
║ │ │A|$o $pe<!@| ║
╟────────────────────────┼─────────────┼──────────────╢
║<|+>|!|< │input text | ║
║ │ │txet tupni ║
║ │ │txet tupni ║
╟────────────────────────┼─────────────┼──────────────╢
║+@># │ |># ║
╚════════════════════════╧═════════════╧══════════════╝
Beachten Sie, dass Testfall 2 zufällig ist, sodass jede Permutation der darin enthaltenen Zeichen gültig ist. Außerdem werden die Ausgaben in der Tabelle durch Zeilenumbrüche getrennt, aber Ihr Programm muss nicht dasselbe tun. Der letzte Wert ist jeweils die endgültige Ausgabe.
Beispiel (nicht Golf) Python-Interpreter
Probieren Sie es online aus! IMO besser, wenn Sie es über IDLE oder was auch immer Sie verwenden ausführen. (Ich habe es bis auf 424 Bytes nach unten gespielt, aber ich bin sicher, dass Sie viel besser machen können).
quelle
<
angetroffen werden. Ist das obligatorisch?+@>#
? Ich habe es auch#
benutzt.Antworten:
Ruby
-palF\|
,146142 BytesProbieren Sie es online aus!
Port of Chas Browns Python-Antwort . Druckt nach der Ausgabe keine Zeilenumbrüche.
Wie üblich ist die Ruby 2.6-Version mit Endlosbereichsindizierung (
i[2..]
) 2 Byte kürzer .quelle
R ,
287286273269 BytesProbieren Sie es online aus!
Abgerollter Code und Erklärung:
quelle
Python 2 ,
215219209208 BytesProbieren Sie es online aus!
-4 weil
raw_input
erforderlich ist.9 Bytes dank Verkörperung der Ignoranz ; 1 Byte nur von Ascii .
quelle
raw_input
. Korrigieren Sie mich, wenn ich falsch liege.input([prompt])
Entspricht eval (raw_input (prompt)). Diese Funktion fängt keine Benutzerfehler ab. Wenn die Eingabe nicht syntaktisch gültig ist, wird ein SyntaxError ausgelöst.C # (Visual C # Interactive Compiler) , 305 Byte
Probieren Sie es online aus!
quelle
Perl 5
-MList::Util=shuffle -pF/\|/
,220217210183 BytesProbieren Sie es online aus!
quelle
Javascript,
292267 BytesJSFiddle
quelle