Pyth là một ngôn ngữ chơi gôn dựa trên Python. Nó sử dụng ký hiệu tiền tố, với mỗi lệnh có một mức độ khác nhau (số lượng đối số mà nó chấp nhận).
Nhiệm vụ của bạn là viết một trình kiểm tra cú pháp cho một ngôn ngữ giống như Pyth (không tồn tại), Pith.
Cú pháp của Pith
Pith chỉ có 8 lệnh char đơn:
01234()"
01234
mỗi cái có số lượng tương ứng, và do đó mong đợi có nhiều đối số sau nó. Ví dụ,
400010
là một chương trình Pith chính xác vì 4
được theo sau bởi bốn đối số 0
0
0
và 10
cuối cùng là 1
đối số tiếp theo là đối số duy nhất 0
. Để hình dung điều này, chúng ta có thể nhìn vào cây sau:
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
nơi R
là nút gốc. Một cách khác để suy nghĩ về điều này là mỗi số đề cập đến số lượng con mà nút tương ứng có trong cây ở trên.
Đây là một chương trình Pith hợp lệ khác, với nhiều hơn một lệnh cơ sở:
210010
tương ứng với
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
Mặt khác,
3120102100
là không một chương trình phần cốt lõi đúng bởi vì ban đầu 3
chỉ có hai đối số, mà chúng ta có thể nhìn thấy bằng cách nhìn vào cây dưới đây:
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
Tiếp theo (
bắt đầu một không giới hạn, và )
kết thúc một không giới hạn. Một liên kết không có bất kỳ số lượng đối số (tham lam) và được tính là một đối số duy nhất cho bất kỳ lệnh cha. Bất kỳ liên kết nào vẫn mở vào cuối chương trình sẽ tự động đóng lại. Một )
lệnh không phải là một lỗi nếu không unboundeds được mở - nó chỉ không có gì *.
Chẳng hạn, chương trình Pith
)31(0)0(201000100
tương ứng với cây
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
Không có liên kết trống là được, vì vậy ()
một chương trình Pith hợp lệ.
Một chương trình Pith không hợp lệ với không giới hạn là
12(010
vì 2
chỉ nhận được một đối số (không giới hạn).
Cuối cùng, "
bắt đầu và kết thúc một chuỗi, luôn là 0 arity và được tính là một đối số duy nhất, ví dụ:
2"010""44)()4"
mà chỉ là một 2
thông qua hai đối số chuỗi "010"
và "44)()4"
. Giống như không liên kết, các chuỗi cũng có thể trống và bất kỳ chuỗi nào không được tiết lộ vào cuối chương trình sẽ tự động bị đóng.
* Phần này là khác nhau từ Pyth gốc mà thực sự không làm điều gì đó trong một trường hợp như thế 1)
, kết thúc 1-arity và nâng cao một lỗi.
Đầu ra đầu vào
Đầu vào sẽ là một chuỗi không trống duy nhất chỉ bao gồm các ký tự 01234()"
. Bạn có thể tùy ý cho rằng một dòng mới bổ sung luôn luôn có mặt. Bạn có thể viết một chức năng hoặc một chương trình đầy đủ cho thử thách này.
Bạn nên xuất một giá trị trung thực nếu đầu vào có giá trị cú pháp Pith hoặc giá trị giả mạo khác. Các giá trị trung thực và sai lệch phải được cố định, vì vậy bạn không thể xuất ra 1
một chương trình hợp lệ và 2
cho một chương trình khác.
Chấm điểm
Đây là mã golf, vì vậy mã trong ít byte nhất sẽ thắng.
Các trường hợp thử nghiệm
Sự thật:
0
)
(
"
()
""
10
400010
210010
("")00
3"""""
(0)))0)1)0
2(2(2(0)0)0)0
2"010""44)()4"
)31(0)0(201000100
())2)1))0"3())"))
3("4321("301(0)21100"4")"123"00)40"121"31000""01010
Giả mạo:
1
1(310
(1)0)
12(010
4"00010"
3120102100
20(2((0)(0)))
2(2(2(0)0)0)01)
4(0102)00)00000
2"00"("00"2(""))
())2)1))0"3())"))
(điều này đúng không, tôi nghĩ vậy).
()210""
có rất nhiều hoạt động không hoạt động)
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]
không? Cái bạn có có các nhánh 2, 0, 0, 1 và 0 - cái thứ hai không nên có.