Hier ist eine sehr einfache Sprachdefinition:
A Variable is any string that does not contain ^, <, >, !, or ?
The empty string is a valid variable identifier
The value of every variable starts at 0.
A Statement is one of (var is a Variable, P is a Program):
var^ -> changes var to be equal to 1 more than itself
var<P> -> while var > 0, changes var to be equal to 1 less than itself, then runs P
var! -> output value of var
var? -> ask for non-negative integer as input, increase var by that value
A Program is a concatenation of Statements, running a Program means running each Statement in order
Beispielprogramme (Beachten Sie, dass der leere String eine Variable ist, ich ihn jedoch aus Gründen der Übersichtlichkeit sparsam verwenden werde und einige Variablen im Programm auf Null gesetzt werden, wenn sie normalerweise standardmäßig 0 sind):
<>: sets the value of the empty string variable to 0
b<>b?b<a^>: asks for b, then adds the value stored in b to a, zeroing b in the process
b<>b?a<>b<a^>: asks for b, then sets a to the value of b, zeroing b in the process
a<>c<>b<a^c^>c<b^> : copies the value in b into a without zeroing it
b<>c<>a<c^c^c<b^>>b! : outputs a multiplied by 2
b^b<a<>a?a!b^> : outputs what you input, forever
Ihr Ziel ist es, den kleinsten Dolmetscher für diese Sprache zu schreiben.
Der Wert einer Variablen kann beliebig groß sein und sollte theoretisch nur durch den Gesamtspeicher begrenzt werden, auf den Ihre Sprache Zugriff hat. Sie müssen jedoch nur Werte bis zu 2 ^ 256 verarbeiten.
Ihr Programm sollte theoretisch in der Lage sein, beliebig lange Programme zu verarbeiten, Sie müssen jedoch nur Programme mit einer Länge von weniger als 2 ^ 32 Zeichen bearbeiten. Sie müssen auch verschachtelte Schleifen mit einer Tiefe von bis zu 2 ^ 32 verarbeiten.
Sie können davon ausgehen, dass es sich bei dem Programm um ein gültiges Programm handelt und dass Sie nur dann nicht negative Ganzzahlen erhalten, wenn Sie nach Eingaben fragen. Sie können auch davon ausgehen, dass nur ASCII-druckbare Zeichen in der Eingabezeichenfolge enthalten sind.
Die Geschwindigkeit des Programms, das Sie interpretieren, spielt keine Rolle, sie wird bereits bei einfachen Dingen wie der 5-stelligen Multiplikation ohne Optimierung schmerzhaft langsam sein.
Wenn Sie eine Sprache verwenden möchten, die keine Eingaben oder Ausgaben in der von der Sprache beschriebenen Weise akzeptiert, verwenden Sie eine Interpretation, die Sie ermöglichen möchten. Dies gilt aus irgendeinem Grund, aus dem Ihre Sprache ein erforderliches Verhalten nicht implementieren kann. Ich möchte, dass alle Sprachen miteinander konkurrieren können.
Kürzeste Sendung gewinnt. Es gelten Standardlücken.