Schreiben Sie ein Programm, das eine Zeichenfolge mit ungerader Länge akzeptiert, die nur die Zeichen .
und enthält :
. Erstellen Sie mit Hilfe eines anfänglich leeren Stapels eine Zahl aus dieser Zeichenfolge wie folgt:
Für jedes Zeichen c in der Zeichenfolge (von links nach rechts) ...
- Wenn c ist
.
und der Stapel weniger als 2 Elemente enthält, drücken Sie 1 auf den Stapel. - Wenn c ist
.
und der Stapel 2 oder mehr Elemente enthält, lassen Sie die beiden obersten Werte vom Stapel fallen und legen Sie ihre Summe auf den Stapel. - Wenn c ist
:
und der Stapel weniger als 2 Elemente enthält, drücken Sie 2 auf den Stapel. - Wenn c ist
:
und der Stapel 2 oder mehr Elemente enthält, lassen Sie die beiden obersten Werte vom Stapel fallen und schieben Sie ihr Produkt auf den Stapel.
Die resultierende Zahl ist der Wert oben im Stapel. Ihr Programm sollte diese Nummer auf stdout ausgeben (mit einem optionalen nachgestellten Zeilenumbruch).
(Eine kleine Analyse zeigt, dass immer nur eine Zahl übrig ist, es sei denn, die Zeichenfolge hat eine gerade Länge, weshalb wir diese ignorieren. Tatsächlich enthält der Stapel nie mehr als 2 Elemente.)
Zum Beispiel ist die Zahl für ::...:.:.
9:
2 1 2 2 /______ stack just after the character below is handled
2 2 4 4 5 5 7 7 9 \
: : . . . : . : . <-- string, one character at a time
Zur Überprüfung der Gesundheit sind hier die Zahlen für alle Zeichenfolgen der Länge 1, 3 und 5:
. 1
: 2
... 2
..: 1
.:. 3
.:: 2
:.. 3
:.: 2
::. 4
::: 4
..... 3
....: 2
...:. 4
...:: 4
..:.. 2
..:.: 1
..::. 3
..::: 2
.:... 4
.:..: 3
.:.:. 5
.:.:: 6
.::.. 3
.::.: 2
.:::. 4
.:::: 4
:.... 4
:...: 3
:..:. 5
:..:: 6
:.:.. 3
:.:.: 2
:.::. 4
:.::: 4
::... 5
::..: 4
::.:. 6
::.:: 8
:::.. 5
:::.: 4
::::. 6
::::: 8
Das kürzeste Programm in Bytes gewinnt. Tiebreaker ist früherer Beitrag.
- Sie können davon ausgehen, dass die Eingabe immer gültig ist, dh eine Zeichenfolge, die nur ungerade Werte enthält
.
und:
deren Länge ungerade ist. - Anstatt ein Programm zu schreiben, können Sie eine Funktion schreiben, die eine gültige Zeichenfolge verwendet und die generierte Zahl ausgibt oder zurückgibt.