首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >打印有效算术表达式

打印有效算术表达式
EN

Code Golf用户
提问于 2018-04-16 11:30:54
回答 1查看 243关注 0票数 5

递归定义“有效算术表达式”:

  1. 任何自然数都是一个有效的算术表达式。
  2. 如果s是一个有效的算术表达式,那么(-s)也是。
  3. 如果pq是有效的算术表达式,那么(p+q)也是。

在上面,“自然数”的递归定义如下:

  1. 0 1 2 3 4 5 6 7 8 9是自然数。
  2. 如果自然数n不是0,则n0 n1 n2 n3 n4 n5 n6 n7 n8 n9是自然数。

或者,通过regex /^(0|[1-9][0-9]*)$/

有效算术表达式的示例:

代码语言:javascript
运行
复制
0
314
(-7)
(0+0)
(314+(-314))

无效算术表达式的示例:

代码语言:javascript
运行
复制
01
-5
5+10

现在的挑战是逐行打印每个有效的算术表达式,即创建一个程序,该程序将逐行输出字符串,约束每个有效的算术表达式最终被打印出来,并且永远不会打印无效的算术表达式。

有效的算术表达式可以多次打印。

现在的挑战是以尽可能少的字节完成这一任务,因为这是密码-高尔夫

标准漏洞应用。

EN

回答 1

Code Golf用户

发布于 2018-04-18 04:21:25

Python,241个字节

代码语言:javascript
运行
复制
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半自动生成的。它速度太快了(为了字节而牺牲速度) :)

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/162386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档