Pyth是一种基于Python的高尔夫语言。它使用前缀表示法,每个命令具有不同的Arity(接受的参数数量)。
您的任务是为(不存在的)类Pyth语言Pith编写语法检查器。
Pith的语法
Pith只有8个单字符命令:
01234()"
01234
每个都有对应的数字,因此期望后面有很多参数。例如,
400010
是一个正确的髓部程序,因为4
后面四个参数0
0
0
和10
,是其中最后一个1
接着一个参数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 arity并计为单个参数,例如
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的分支-第二个分支不应在那里。