文字.
とのみを含む奇数長の文字列を取り込むプログラムを作成し:
ます。最初は空のstackを使用して、次のようにこの文字列から数値を生成します。
文字列内のすべての文字cについて(左から右へ)...
- 場合cがあり
.
、スタックが2つの未満の要素を有し、スタックに1を押してください。 - 場合cがあり
.
、スタックは、2つの以上の要素を有し、スタックから2つのトップの値をポップし、スタックにその和を押します。 - 場合cがあり
:
、スタックが2つの未満の要素を有し、スタックに2を押してください。 - 場合cがあり
:
、スタックは、2つの以上の要素を有し、スタックから2つのトップの値をポップし、スタックにそれらの製品を押し出します。
結果の数値は、スタックの一番上の値です。プログラムは、この番号を標準出力に出力する必要があります(オプションの末尾の改行を使用)。
(少しの分析では、文字列の長さが偶数でない限り、残っている数字は1つだけであることが示されています。そのため、これらは無視されます。実際、スタックには2つ以上の要素がありません。)
たとえば、の番号::...:.:.
は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
健全性チェックとして、長さ1、3、および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
バイト単位の最短プログラムが優先されます。Tiebreakerは以前の投稿です。
- 入力は常に有効であると想定できます。つまり、長さが奇数の文字列のみが含まれている
.
と仮定でき:
ます。 - プログラムを作成する代わりに、有効な文字列を取り込んで、生成された数値を出力または返す関数を作成できます。