Einführung
Forte ist eine sehr eigenartige esoterische Sprache, die auf dem Konzept der Änderung der Zahlenwerte basiert. In Forte-Zahlen sind keine Konstanten, sondern Variablen. Mit der LET
Anweisung können Sie ihnen neue Werte zuweisen.
Zum Beispiel wird nach der Ausführung LET 2=4-1
von nun an 2
der Wert von angenommen 3
, was bedeutet, dass der Wert, wenn 2
er in einem Ausdruck auftaucht, stattdessen durch "ersetzt" wird 3
. Der Ausdruck (1+1)*2
würde jetzt zu auswerten 9
.
Diese Anweisung in Forte wird sowohl zum Speichern von Informationen als auch zur Flusssteuerung verwendet (Zeilen sind nummeriert und durch Ändern des Werts ihrer Nummern können Sie die Reihenfolge ihrer Ausführung bestimmen). In dieser Herausforderung werden wir uns nicht mit diesem zweiten Aspekt befassen.
Die Herausforderung
Sie müssen einen Interpreter für eine vereinfachte Teilmenge der Forte- LET
Ausdrücke schreiben .
Sie erhalten als Eingabe eine Reihe von Zeilen, die dieser Grammatik entsprechen:
<line>::= <number>=<expression>
<expression>::= <number>|<expression>+<number>
Hinweis: Diese Grammatik ist ungültig, da Zeilennummern, LET und Klammern fehlen (diese sind immer obligatorisch).
Das heißt, Sie müssen sich nur mit dem Berechnen von Summierungen und dem Zuweisen von Werten zu Zahlen befassen. Klammern sind in der Eingabe nicht vorhanden, und jeder Ausdruck muss von links nach rechts ausgewertet werden. Beachten Sie, dass Teilergebnisse von Neudefinitionen betroffen sind!
Zahlen sind immer nicht negative Ganzzahlen, bis zur Grenze des nativen Ganzzahltyps Ihrer Sprache (oder 2 ^ 32, je nachdem, welcher Wert höher ist).
Für jede Zeile sollten Sie das Ergebnis des Ausdrucks ausgeben und dieses Ergebnis dem (möglicherweise neu zugewiesenen) Wert der ersten Zahl zuweisen, was sich auf die Interpretation der folgenden Zeilen auswirkt.
Das ist Code-Golf , der kürzeste Code (in Bytes) gewinnt!
Andere Regeln
- Das Eingabeformat ist flexibel. Sie können beispielsweise eine einzelne Zeichenfolge mit Zeilenumbrüchen, eine Liste mit Zeichenfolgen und eine Liste mit Zahlen verwenden. Dasselbe gilt für die Ausgabe, sofern klar ist, was das Ergebnis der einzelnen Ausdrücke in ist die Eingabe.
- Sie können entweder eine Funktion, ein vollständiges Programm oder eine Lösung einreichen, die in einer REPL-Umgebung ausgeführt werden soll, indem Sie sie für jede Zeile einmal aufrufen.
- Standardlücken sind verboten, insbesondere können Sie in Ihrem Code keinen externen Forte-Interpreter aufrufen.
Beispiele
Diese sind alle Teil derselben Eingabe. Nach jeder Zeile wird die erwartete Ausgabe im Verhältnis zu dieser Zeile angezeigt, manchmal mit einem Kommentar, der relevante Neuzuweisungen angibt (nicht Teil der erforderlichen Ausgabe).
5=4
4
6=5
4 # 5 -> 4
7=1+2+5
7
7=5+2+1
4 # Order of operations matters! 5+2 -> 4+2 -> 6 -> 4
18=5+6+7
12
5=3
3 # Remember: 5 -> 4
10=6+4
3 # 6 -> 4 -> 3, 3+3 = 6 -> 3
0
ist gültig ("Zahlen werden immer nicht negative ganze Zahlen sein")
0
eine gültige Nummer?