Tulis program yang menggunakan string panjang ganjil yang hanya berisi karakter .
dan :
. Dengan bantuan tumpukan yang awalnya kosong , buat angka dari string ini sebagai berikut:
Untuk setiap karakter c dalam string (dari kiri ke kanan) ...
- Jika c adalah
.
dan tumpukan memiliki kurang dari 2 elemen, tekan 1 pada tumpukan. - Jika c adalah
.
dan tumpukan memiliki 2 atau lebih elemen, pop dua nilai teratas dari tumpukan dan dorong jumlah mereka ke tumpukan. - Jika c adalah
:
dan tumpukan memiliki kurang dari 2 elemen, tekan 2 pada tumpukan. - Jika c adalah
:
dan tumpukan memiliki 2 elemen atau lebih, pop dua nilai teratas dari tumpukan dan dorong produk mereka ke tumpukan.
Angka yang dihasilkan adalah nilai di bagian atas tumpukan. Program Anda harus mencetak nomor ini ke stdout (dengan baris tambahan tambahan opsional).
(Analisis kecil menunjukkan bahwa hanya ada satu angka yang tersisa kecuali string memiliki panjang genap, itulah sebabnya kami mengabaikannya. Faktanya, stack tidak pernah memiliki lebih dari 2 elemen.)
Misalnya, nomor untuk ::...:.:.
adalah 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
Sebagai pemeriksaan kewarasan, berikut adalah angka untuk semua string dengan panjang 1, 3, dan 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
Program terpendek dalam byte menang. Tiebreaker adalah posting sebelumnya.
- Anda dapat mengasumsikan input selalu valid, yaitu string yang hanya berisi
.
dan:
yang panjangnya ganjil. - Alih-alih menulis program, Anda dapat menulis fungsi yang mengambil string yang valid dan mencetak atau mengembalikan nomor yang dihasilkan.