Pyth 는 Python 기반의 골프 언어입니다. 접두사 표기법을 사용하며 각 명령에는 다른 arity (수용 가능한 인수 수)가 있습니다.
당신의 임무는 존재하지 않는 Pyth와 같은 언어 Pith에 대한 구문 검사기를 작성하는 것입니다.
피스의 문법
Pith에는 8 개의 단일 문자 명령 만 있습니다.
01234()"
01234각각은 해당 숫자의 arity를 가지므로 많은 인수가 필요합니다. 예를 들어
400010
4뒤에는 네 개의 인수가 0 0 0있고 10마지막 1인수는 단일 인수 가 있기 때문에 올바른 Pith 프로그램 0입니다. 이를 시각화하기 위해 다음 트리를 볼 수 있습니다.
R
|
4
|
-------------
| | | |
0 0 0 1
|
0
R루트 노드는 어디에 있습니까 ? 이것을 생각하는 다른 방법은 각 숫자는 해당 노드가 위의 트리에있는 자식의 수를 나타냅니다.
하나 이상의 기본 명령을 가진 또 다른 유효한 Pith 프로그램이 있습니다.
210010
에 해당하는
R
|
-------------
| |
2 1
| |
--------- 0
| |
1 0
|
0
반면에
3120102100
초기 에는 두 개의 인수 만 있기 때문에 올바른 Pith 프로그램 이 아닙니다 . 3아래 트리를 보면 알 수 있습니다.
R
|
3
|
------------------------ ??
| |
1 2
| |
2 ------
| | |
------ 1 0
| | |
0 1 0
|
0
다음 (은 무제한을 시작하고 무제한을 )종료합니다. 무제한은 많은 수의 인수를 취하고 (부정적으로) 모든 상위 명령에 대한 단일 인수로 계산됩니다. 프로그램이 끝날 때까지 열려있는 모든 제한은 자동으로 닫힙니다. )더 unboundeds가 열려없는 경우 명령이 오류가 아닙니다 - 그냥 아무것도하지 않는다 *.
예를 들어, Pith 프로그램
)31(0)0(201000100
나무에 해당
R
|
3
|
------------------------------
| | |
1 0 (
| |
( -----------------------------
| | | | | |
0 2 0 0 1 0
| |
------- 0
| |
0 1
|
0
빈 무제한은 괜찮습니다 (). 유효한 Pith 프로그램도 마찬가지 입니다.
제한이없는 잘못된 Pith 프로그램은
12(010
2하나만 인수를받지 않기 때문에 (무한한).
마지막으로 "문자열을 시작하고 종료합니다. 문자열은 항상 0 개이며 단일 인수로 계산됩니다. 예 :
2"010""44)()4"
이는 단지입니다 2두 개의 문자열 인수를 전달되는 "010"과 "44)()4". 언 바운드와 마찬가지로 문자열도 비어있을 수 있으며 프로그램 끝의 닫히지 않은 문자열은 자동으로 닫힙니다.
*이 부분은 실제로 원래 Pyth 다른 수행 과 같은 경우에 무언가를 1)1-인수에 대응을 종료하고 오류를 제기.
입출력
입력은 문자만으로 구성된 비어 있지 않은 단일 문자열 01234()"입니다. 선택적으로 추가 후행 줄 바꿈이 항상 있다고 가정 할 수 있습니다. 이 도전에 대한 기능이나 전체 프로그램을 작성할 수 있습니다.
입력이 구문 상 유효한 Pith이면 참 값을, 그렇지 않으면 거짓 값을 출력해야합니다. 진실과 허위 값은 고정되어야하므로 1하나의 유효한 프로그램과 2다른 프로그램에 대해 출력 할 수 없습니다 .
채점
이것은 코드 골프이므로 가장 적은 바이트의 코드가 이깁니다.
테스트 사례
진실한 :
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
거짓 :
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())"))(참이어야한다, 나는 생각한다).
()210""많은 운영
[( [2 [0] [1 [0] ] ] [0] [1 [0]] [0] ]? 가지고있는 것은 2, 0, 0, 1 및 0의 가지를 가지고 있습니다-두 번째 것은 없어야합니다.