Beschreibung
Imaginary Programming Language (IPL) verwendet die polnische Umkehrnotation. Es hat die folgenden Befehle:
- i - Nummer eingeben und auf den Stapel schieben
- o - zerstörungsfreie Ausgabe oben auf dem Stapel (Nummer bleibt auf dem Stapel)
- d - Stapel oben wegwerfen
- Ganzzahl - Schieben Sie diese Zahl auf den Stapel
- + - * - Zwei Zahlen aus dem Stapel ziehen, entsprechende Operation ausführen und das Ergebnis zurückschieben. Es gibt keine Unterteilung in IPL.
IPL funktioniert nur mit ganzen Zahlen und wird für einfache Berechnungen verwendet. Ein IPL-Programm wird in eine Zeile geschrieben und durch Leerzeichen getrennt. Leere Zeichenfolge ist ein gültiges IPL-Programm.
IPL-Programm:
i i + o
Gibt zwei Zahlen ein, addiert sie und gibt das Ergebnis aus.
Eingabenummern und Ganzzahlen, die zum Stapeln verschoben werden können, liegen im Bereich [-999, 999], die Ausgabe kann jedoch beliebig sein. Wenn Ihre Sprache keine großen Zahlen unterstützt, ist dies jedoch in Ordnung.
Eingabe- / Ausgabeformat
Sie können ein beliebiges Eingabe- / Ausgabeformat auswählen, sofern das Verstehen und Lesen / Schreiben klar ist: Zeichenfolge, Liste, Token usw.
Aufgabe
Sie erhalten ein IPL-Programm, das Sie optimieren müssen (Länge reduzieren):
i 12 + 3 + o d 2 3 + d
Nach der Optimierung werden
i 15 + o
Sie müssen den Stapelstatus nicht beibehalten, aber die Anzahl der Eingaben und Ausgaben sowie deren Reihenfolge sollten für das ursprüngliche und optimierte Programm übereinstimmen.
Also IPL-Programm:
-40 i * 2 * o i + 3 1 + o i 2 *
Nach der Optimierung werden
i -80 * o i 4 o i
oder
-80 i * o i 4 o i
(Beachten Sie, dass Sie alle Eingaben speichern müssen, auch wenn sie irrelevant sind).
Es sollte keine Hardcodierung für Testfälle geben, Code sollte auf jedem beliebigen IPL-Programm funktionieren und ein möglichst kurzes IPL-Programm erstellen, das die Anforderungen erfüllt.
Wertung
Standard-Code-Golf-Wertung.
UPDATE: Die Wertung wurde gemäß @Sanchises-Vorschlag in reine Code-Golfwertung geändert.
Testfälle:
Eingang:
(empty string)
Mögliche Ausgabe:
(empty string)
Eingang:
i 4 * 2 + 3 * 6 - o
Mögliche Ausgabe:
i 12 * o
Eingang:
1 1 + o
Mögliche Ausgabe:
2 o
Eingang:
i 2 + 3 + o d 2 3 + d
Mögliche Ausgabe:
i 5 + o
Eingang:
-40 i * 2 * o i + 3 1 + o i 2 *
Mögliche Ausgabe:
-80 i * o i 4 o i
Eingang:
i i 1 + i 1 + i 1 + i 1 + d d d d o
Mögliche Ausgabe:
i i i i i d d d d o
Eingang:
i i i 0 * * * o
Mögliche Ausgabe:
i i i 0 o
Eingang:
i i i 1 * * * o
Mögliche Ausgabe:
i i i * * o
Eingang:
i 222 + i 222 - + o
Mögliche Ausgabe:
i i + o
Eingang:
i 2 + 3 * 2 + 3 * 2 + 3 * i * d i 2 + 3 * i + d i o 2 + 2 - 0 * 1 o
Mögliche Ausgabe:
i i i i i o 1 o
Eingang:
i 1 + 2 * 1 + o
Mögliche Ausgabe:
i 2 * 3 + o
Eingang:
1 1 + o i 2 + 3 + o d 2 3 + d 4 i * 2 * o i + 3 1 + o i 2 * i i 1 + i 1 + i 1 + i 1 + d d d d o i i i 0 * * * o i i i 1 * * * o i 2 + i 2 - + o i 2 + 3 * 2 + 3 * 2 + 3 * i * d i 2 + 3 * i + d i o 2 + 2 - 0 * 1 o
Mögliche Ausgabe:
2 o i 5 + o 8 i * o i 4 o i i i i i i d d d d o i i i 0 o i i i * * * o i i + o i i i i i o 1 o
i i d o
umi o i
(der Eingang in Ordnung ist und der Ausgang ist in Ordnung) oder sollten Sie es nicht vereinfachen? (Der Satz von Ein- und Ausgängen sollte in Ordnung sein)