Viết chương trình lấy một chuỗi gồm bốn ký tự ()[]
thỏa mãn các điểm sau:
- Mỗi dấu ngoặc trái
(
có dấu ngoặc đơn bên phải)
. - Mỗi khung bên trái
[
có một khung bên phải phù hợp]
. - Các cặp dấu ngoặc đơn và dấu ngoặc sẽ không trùng nhau. ví dụ:
[(])
không hợp lệ vì dấu ngoặc phù hợp không được chứa đầy đủ trong dấu ngoặc đơn, cũng không phải ngược lại. - Các ký tự đầu tiên và cuối cùng là một cặp dấu ngoặc hoặc dấu ngoặc phù hợp. Vì vậy
([]([]))
và[[]([])]
có giá trị nhưng[]([])
không.
(Một ngữ pháp cho định dạng đầu vào là <input> ::= [<input>*] | (<input>*)
.)
Mỗi cặp dấu ngoặc đơn và dấu ngoặc khớp ước tính thành một số nguyên không âm:
- Các giá trị của các cặp bên trong dấu ngoặc phù hợp đều được tính tổng . Trận đấu trống
()
có giá trị0
. - Các giá trị của các cặp trong dấu ngoặc phù hợp đều được nhân lên . Trận đấu trống
[]
có giá trị1
.
( Tổng hoặc tích của một số là cùng một số đó.)
Ví dụ: ([](())([][])[()][([[][]][][])([][])])
có thể được chia nhỏ và đánh giá là 9
:
([](())([][])[()][([[][]][][])([][])]) <input>
(1 (0 )(1 1 )[0 ][([1 1 ]1 1 )(1 1 )]) <handle empty matches>
(1 0 2 0 [(1 1 1 )2 ]) <next level of matches>
(1 0 2 0 [3 2 ]) <and the next>
(1 0 2 0 6 ) <and the next>
9 <final value to output>
Một vi dụ khac:
[([][][][][])([][][])([][][])(((((([][]))))))] <input>
[(1 1 1 1 1 )(1 1 1 )(1 1 1 )((((((1 1 ))))))]
[5 3 3 (((((2 )))))]
[5 3 3 ((((2 ))))]
[5 3 3 (((2 )))]
[5 3 3 ((2 ))]
[5 3 3 (2 )]
[5 3 3 2 ]
90 <output>
Chương trình của bạn cần đánh giá và in số nguyên được biểu thị bằng toàn bộ chuỗi đầu vào. Bạn có thể giả sử đầu vào là hợp lệ. Mã ngắn nhất tính bằng byte thắng.
Thay vì một chương trình, bạn có thể viết một hàm lấy một chuỗi và in hoặc trả về số nguyên.