จงเขียนโปรแกรมที่ใช้ในสตริงที่มีความยาวแปลกที่มีเพียงตัวละครและ.
:
ด้วยความช่วยเหลือของกองซ้อนที่ว่างเปล่าเริ่มสร้างหมายเลขจากสายอักขระนี้ดังนี้:
ทุกตัวอักษรCในสตริง (ไปจากซ้ายไปขวา) ...
- หากcคือ
.
และสแต็กมีองค์ประกอบน้อยกว่า 2 ให้กด 1 บนสแต็ก - หากcคือ
.
และสแต็กมี 2 องค์ประกอบหรือมากกว่าให้ปรากฏค่าสูงสุดสองค่าออกจากสแต็กและส่งผลรวมของพวกเขาไปยังสแต็ก - หากcคือ
:
และสแต็กมีองค์ประกอบน้อยกว่า 2 ให้กด 2 บนสแต็ก - หากcคือ
:
และสแต็กมีองค์ประกอบ 2 ตัวหรือมากกว่าให้แสดงค่าสูงสุดสองค่าออกจากสแต็กและดันผลิตภัณฑ์ลงบนสแต็ก
หมายเลขผลลัพธ์คือค่าที่ด้านบนสุดของสแต็ก โปรแกรมของคุณควรพิมพ์หมายเลขนี้ไปยัง stdout (พร้อมกับขึ้นบรรทัดใหม่ตัวเลือก)
(การวิเคราะห์เพียงเล็กน้อยแสดงให้เห็นว่ามีจำนวนที่เหลืออยู่เพียงหมายเลขเดียวเท่านั้นยกเว้นว่าสตริงมีความยาวเท่ากันซึ่งเป็นสาเหตุที่เราไม่สนใจสิ่งเหล่านั้นในความเป็นจริงสแต็กไม่เคยมีองค์ประกอบมากกว่า 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 เป็นโพสต์ก่อนหน้า
- คุณอาจสันนิษฐานว่าอินพุตนั้นถูกต้องเสมอเช่นสตริงที่มีเพียง
.
และ:
มีความยาวคี่ - แทนที่จะเขียนโปรแกรมคุณสามารถเขียนฟังก์ชั่นที่รับสายอักขระที่ถูกต้องและพิมพ์หรือส่งกลับหมายเลขที่สร้างขึ้น