Viết chương trình lấy một chuỗi có độ dài lẻ chỉ chứa các ký tự .
và :
. Với sự trợ giúp của ngăn xếp ban đầu trống , tạo một số từ chuỗi này như sau:
Đối với mọi ký tự c trong chuỗi (đi từ trái sang phải) ...
- Nếu c là
.
và ngăn xếp có ít hơn 2 phần tử, đẩy 1 trên ngăn xếp. - Nếu c là
.
và ngăn xếp có 2 phần tử trở lên, hãy bật hai giá trị trên cùng ra khỏi ngăn xếp và đẩy tổng của chúng lên ngăn xếp. - Nếu c là
:
và ngăn xếp có ít hơn 2 phần tử, đẩy 2 trên ngăn xếp. - Nếu c là
:
và ngăn xếp có 2 phần tử trở lên, hãy bật hai giá trị trên cùng khỏi ngăn xếp và đẩy sản phẩm của chúng lên ngăn xếp.
Số kết quả là giá trị ở đầu ngăn xếp. Chương trình của bạn nên in số này ra thiết bị xuất chuẩn (với một dòng mới tùy chọn).
(Một phân tích nhỏ cho thấy chỉ còn lại một số trừ khi chuỗi có độ dài chẵn, đó là lý do tại sao chúng ta bỏ qua các số đó. Trên thực tế, ngăn xếp không bao giờ có nhiều hơn 2 phần tử.)
Ví dụ: số cho ::...:.:.
là 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
Để kiểm tra độ tỉnh táo, đây là các số cho tất cả các chuỗi có độ dài 1, 3 và 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
Chương trình ngắn nhất tính bằng byte thắng. Tiebreaker là bài trước.
- Bạn có thể giả sử đầu vào luôn hợp lệ, tức là một chuỗi chỉ chứa
.
và:
độ dài của nó là số lẻ. - Thay vì viết chương trình, bạn có thể viết một hàm lấy một chuỗi hợp lệ và in hoặc trả về số được tạo.