StickStack ist eine sehr einfache stapelbasierte Programmiersprache mit nur zwei Anweisungen:
|
Schiebt die Länge des Stapels auf den Stapel-
Entfernt die beiden obersten Elemente aus dem Stapel und drückt ihre Differenz zurück (second topmost - topmost
)
Sprachdetails
- Der Stack ist zu Beginn des Programms leer.
- Alle Anweisungen werden nacheinander von links nach rechts ausgeführt.
- Wenn sich weniger als 2 Zahlen auf dem Stapel befinden, ist der
-
Befehl unzulässig. - Am Ende der Ausführung sollte der Stapel genau eine Zahl enthalten .
Jede beliebige Ganzzahl kann von einem StickStack-Programm generiert werden. Beispielsweise:
|||--||-- generates the number 2 through the following stack states:
[]
[0]
[0, 1]
[0, 1, 2]
[0, -1]
[1]
[1, 1]
[1, 1, 2]
[1, -1]
[2]
Um Ihren StickStack-Code auszuwerten, können Sie diesen Online-Evaluator (CJam) verwenden . (Danke für @Martin für den Code.)
Die Aufgabe
Sie sollten ein Programm oder eine Funktion schreiben, die eine Ganzzahl als Eingabe ausgibt oder eine Zeichenfolge zurückgibt, die ein StickStack-Programm darstellt, das die angegebene Zahl ausgibt.
Wertung
- Ihre primäre Punktzahl ist die Gesamtlänge der StickStack-Programme für die unten angegebenen Testfälle. Niedrigere Punktzahl ist besser.
- Ihre Einreichung ist nur gültig, wenn Sie Ihr Programm für alle Testfälle ausgeführt und Ihre Punktzahl gezählt haben.
- Ihre sekundäre Punktzahl (Tiebreaker) ist die Länge Ihres Erzeugungsprogramms oder Ihrer Erzeugungsfunktion.
Testfälle eingeben
(Jede Nummer ist ein anderer Testfall.)
-8607 -6615 -6439 -4596 -4195 -1285 -72 12 254 1331 3366 3956 5075 5518 5971 7184 7639 8630 9201 9730
Ihr Programm sollte für alle Ganzzahlen (die Ihr Datentyp verarbeiten kann) funktionieren, nicht nur für die angegebenen Testfälle. Die Lösungen für die Testnummern sollten nicht in Ihr Programm fest einprogrammiert werden. Im Zweifelsfall werden die Testnummern geändert.