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).
<angetroffen werden. Ist das obligatorisch?
+@>#? Ich habe es auch #benutzt.