背景
这个难题是四个四分之一难题的变体(本身就是上一个问题的主题)。像这个难题一样,目标是仅使用四位数字和某些数学运算符来查找不同整数的数学表达式。但是,在这种情况下,允许的数字仅为2、0、1和5。每个解决方案必须以正确的顺序准确地出现一次。令人惊讶的是,可以用这种方式表示许多整数。鼓励求解器首先尝试手动解决问题,因为它很有趣。
规则
常数可以由一个或多个数字构成:
- 整数:例如2、0、15等
- 小数:例如.2,.01、1.5等。
- 重复小数点:例如.2〜(= 0.222 ...)、. 15〜(= 0.1555 ...),20.15 ~~(= 20.1515 ...)
允许以下一元运算:
- 一元否定:-x
- 平方根:sqrt(x)
- 整数阶乘:x!
允许以下二进制操作:
- 标准算术运算符:x + y,xy,x * y和x / y
- 任意幂:x ^ y
- 任意根:rt [x](y)(= y的第x个根)
任务
您的程序应打印出尽可能多的0到100之间的整数的表达式,然后输出产生的表达式数量。
- 解决方案必须按顺序打印,格式为n = [expr]。
- 表达式必须依次使用所有数字2、0、1、5。
- 表达式必须使用上述符号打印。允许但不需要括号,空格也是如此。运算符的优先级顺序为一元否定,阶乘,乘幂,乘/除和加/减。
- 该程序无需返回所有数字的解决方案。因此,仅输出0的程序有效。但是,请参阅下面的评分部分。
- 该程序应在不到15分钟的现代计算机上运行。
您可以编写程序或函数。表达式应打印到STDOUT(或最接近的替代项)。表达式的数量可以打印到STDOUT或作为整数返回。适用标准代码的高尔夫限制。
输出示例
0=2*0*1*5
10=20*1*.5
42=((2+0!)!+1)!/5!
100=20*1*5
4
计分
更新:@orlp注意到计分系统存在缺陷。有关如何或是否应解决此问题的讨论,请参见http://meta.codegolf.stackexchange.com/questions/5106/way-of-salvaging-two-zero-one-five-puzzle-challenge。
首先根据解决方案产生的表达式数对其进行评分,然后再根据其代码长度(以字节为单位)对解决方案进行评分。因此,产生80个结果的1000字节程序将击败仅产生79个结果的100字节程序(尽管可以很容易地扩展后者以包括丢失的结果)。
对于那些想要激发目标的人,下面是可以表示的表达式数量的下限。我不打算提交参赛作品,因此以更少的钱赢得比赛很有可能!
至少有85个(共101个),尽管可能更高。
计分板
作为额外的奖励,这是分数进展的摘要。只要您得分最高,就可以将自己添加到表的顶部(或要求其他人加入)。
- 0个表达式,1个字节(Pyth):仅输出0的实现