Weil wir nicht genug von esoterischen Golfspielen bekommen können, oder?
/// - Ausgesprochene Schrägstriche - ist eine lustige kleine Sprache, die auf der s///
Regex-Ersetzungsfunktion von Perl Fame basiert . Es enthält nur zwei Sonderzeichen, Schrägstrich /
und Backslash \
. Sie können einen vollständigen Artikel im esolangs-Wiki finden , aber ich werde eine Beschreibung der Sprache unten sowie einige Beispiele wiedergeben.
Kurz gesagt, es funktioniert, indem es sich /pattern/repl/rest
im Programm identifiziert und die Substitution so oft wie möglich durchführt. Es gibt keine Sonderzeichen außer /
und \
: /
Beschreibt Muster und Ersetzungen im Programm, während \
Sie Literal /
oder \
Zeichen in Ihren Code einfügen können. Insbesondere handelt es sich hierbei nicht um reguläre Ausdrücke, sondern nur um einfache Zeichenfolgensubstitutionen.
Ihre Herausforderung besteht darin, einen Interpreter für die Sprache /// zu erstellen, entweder als Programm, das STDIN liest, oder als Funktion, die ein Zeichenfolgenargument mit möglichst wenigen Zeichen verwendet.
Sie können eine beliebige Sprache außer /// verwenden. Sie dürfen keine Bibliotheken verwenden, die ///; Sie können jedoch reguläre Ausdrücke, reguläre Ausdrücke oder Bibliotheken mit übereinstimmenden Zeichenfolgen verwenden.
Ausführung
Es gibt vier Zustände: Drucken , Muster , Ersetzen und Ersetzen . In jedem Staat außer Substitution :
- Wenn das Programm leer ist, wird die Ausführung angehalten.
- Ansonsten, wenn das erste Zeichen ist
\
, machen Sie etwas mit dem nächsten Zeichen (falls vorhanden) und entfernen Sie beide aus dem Programm. - Andernfalls
/
entfernen Sie das erste Zeichen und wechseln in den nächsten Status. - Ansonsten mache etwas mit dem ersten Zeichen und entferne es aus dem Programm.
- Wiederholen.
Die Zustände durchlaufen nacheinander Druck , Muster , Ersetzung und Ersetzung .
- Im Druckmodus bedeutet "etwas tun" die Ausgabe des Zeichens.
- Im Pattern- Modus bedeutet "etwas tun", das Zeichen zum aktuellen Pattern hinzuzufügen.
- Im Ersetzungsmodus bedeutet "etwas tun", dass das Zeichen zum aktuellen Ersetzungsmodus hinzugefügt wird.
Im Substitutionsmodus folgen Sie anderen Regeln. Ersetzen Sie wiederholt das erste Auftreten des aktuellen Patterns durch das aktuelle Replacement im Programm, bis keine Substitutionen mehr möglich sind. Löschen Sie zu diesem Zeitpunkt das Muster und den Ersatz und kehren Sie zum Druckmodus zurück .
Im Programm /foo/foobar/foo foo foo
passiert folgendes:
/foo/foobar/foo foo foo
foo foo foo
foobar foo foo
foobarbar foo foo
foobarbarbar foo foo
...
Dies führt eine Endlosschleife durch und beendet den Substitutionsmodus nie . Wenn das Pattern leer ist, stimmt das erste Vorkommen der leeren Zeichenfolge - am Anfang des Programms - immer überein, sodass der Substitutionsmodus für immer wiederholt wird und niemals anhält.
Beispiele
no
Ausgang: no
.
/ world! world!/Hello,/ world! world! world!
Ausgang: Hello, world!
.
/foo/Hello, world!//B\/\\R/foo/B/\R
Ausgang: Hello, world!
.
a/ab/bbaa/abb
Ausgang: a
. Programm stoppt nicht.
//
Ausgabe: keine.
///
Ausgabe: keine. Programm stoppt nicht.
/\\/good/\/
Ausgang: good
.
Es gibt auch eine Quine im Wiki, die du ausprobieren kannst.
\
Zeichen entfernt sich von allen darauf folgenden Zeichen, einschließlich /
der Zeichen , die später wie gewohnt verwendet werden können. Das sieht zwar nicht nach viel aus, macht aber Turing komplett .
///
IDE, die ich mache!
/-/World//--/Hello//--W/--, w/---!
Was gibt es nicht zu lieben? (Versuchen Sie, die Bindestriche am Ende zu entfernen.)