递归定义“有效算术表达式”:
s
是一个有效的算术表达式,那么(-s)
也是。p
和q
是有效的算术表达式,那么(p+q)
也是。在上面,“自然数”的递归定义如下:
0
1
2
3
4
5
6
7
8
9
是自然数。n
不是0
,则n0
n1
n2
n3
n4
n5
n6
n7
n8
n9
是自然数。或者,通过regex /^(0|[1-9][0-9]*)$/
有效算术表达式的示例:
0
314
(-7)
(0+0)
(314+(-314))
无效算术表达式的示例:
01
-5
5+10
现在的挑战是逐行打印每个有效的算术表达式,即创建一个程序,该程序将逐行输出字符串,约束每个有效的算术表达式最终被打印出来,并且永远不会打印无效的算术表达式。
有效的算术表达式可以多次打印。
现在的挑战是以尽可能少的字节完成这一任务,因为这是密码-高尔夫。
标准漏洞应用。
发布于 2018-04-18 04:21:25
g=lambda n,s=0:s<6 and(l+r for x in(["\x13 8"]+list("I-x</"))[s]for a in range(n)for l in g(a,ord(x)%12)for r in g(n-a,ord(x)//12))or[]if n^1else s>7and["(-)+"[s-8]]or list("0123456789"[s==7:])*(s%6<2)
i=1
while i:print("\n".join(g(i)));i+=1
这并不太短,但它是一种表驱动的方法,它是由我为这种语言编写的CFG半自动生成的。它速度太快了(为了字节而牺牲速度) :)
https://codegolf.stackexchange.com/questions/162386
复制相似问题