元背景
这是关于Puzzling的一个问题,即时反应是“嗯,有人会用计算机解决这个问题”。对于要解决这个问题的程序到底有多复杂,存在争议。好吧,“这个程序必须有多复杂”几乎就是代码高尔夫的定义,所以也许PPCG可以解决这个问题?
背景
甲火柴方程基本上是一个正常的数学方程,但是其中数字和运营商通过将火柴到表物理构造。(这里的火柴棒的主要相关特征是它们相当坚固并且具有恒定的长度;有时人们会改用其他物体,例如棉签。)
对于这个挑战,我们不需要为火柴的排列方式定义特定的规则(就像链接的挑战一样)。相反,我们只关心表示一个计算为给定数字的表达式所需的火柴棍数量。
任务
这是您可以使用的数字字母和数学运算符,每个运算符的成本都包含在火柴棒中:
0
,花费6条火柴1
,花费2个火柴棍2
,花费5条火柴3
,花费5条火柴4
,花费4个火柴棍5
,花费5条火柴6
,花费6条火柴7
,花费3个火柴棍8
,花费7根火柴9
,花费6条火柴+
,花费2个火柴棍-
,花费1个火柴棍×
,花费2个火柴棍
(为了避免使用非ASCII字符,可以×
根据需要*
在程序的输出中表示为。在大多数编码中,×
字节占用的字节数大于*
,因此我想大多数程序都希望利用此余地)
您需要编写一个程序,该程序将非负整数作为输入(通过任何合理的方法),并生成一个计算结果为该整数作为输出的表达式(同样通过任何合理的方法)。此外,该表达式必须是平凡的:它必须包含至少一个运营商+
,-
或×
。最后,就所有火柴棍成本而言,您输出的表达式在所有符合规范的输出中必须是最便宜的(或与最便宜的捆绑)。
澄清说明
- 您可以通过在一行中输出多个数字来形成多个数字(例如,
11-1
要产生的有效输出10
)。完全准确地说,所得数字将以十进制表示。这种级联不是对中间结果起作用的操作;仅针对原始表达式中出现的文字数字。 - 为了这个挑战的目的。
+
,-
和×
是中缀运算符;他们需要左右左右有一个论点。不允许在前缀位置(例如+5
或)中使用它们-8
。 - 您没有可用的括号(或任何其他控制优先级的方法)。该表达式根据典型的默认优先级规则进行求值(首先进行乘法运算,然后从左至右对加法和减法求值)。
- 除上面列出的数学运算符或常量外,您无权访问任何数学运算符或常量;Puzzling经常接受“横向思考”解决方案,但是要求计算机自己提出这些解决方案是没有意义的,在PPCG上,我们希望客观地找到解决方案是否正确。
- 通常的整数溢出规则适用:您的解决方案必须能够在语言的假设(或实际)版本中使用任意大整数,默认情况下所有整数都是无界的,但是如果您的程序由于实现而在实践中失败不支持那么大的整数,这不会使解决方案无效。
- 如果您多次使用相同的数字或运算符,则每次使用时都要支付其火柴成本(因为,显然,您无法在桌子上的两个不同位置重复使用相同的物理火柴)。
- 没有时间限制;蛮力解决方案是可以接受的。(尽管您拥有比暴力破解还要快的解决方案,但即使更长,也可以随意发布;查看其他方法的比较总是很有趣的。)
- 尽管从不需要编写代码说明,但这可能是个好主意。代码高尔夫球解决方案通常很难阅读(尤其是对于不熟悉其编写语言的人),并且除非您了解其工作原理,否则很难评估(并对其投票)。
胜利条件
作为代码高尔夫球挑战,认为字节数更少的答案更好。但是,像往常一样,即使它们比某些其他语言更冗长,也可以用不同的方法或特定的语言发布答案。高尔夫的目标实际上是看您可以优化某个特定程序的程度,以这种方式进行操作可以为我们提供许多潜在的程序来优化。因此,如果有人使用完全不同的方法或完全不同的语言提交解决方案并获得更短的答案,不要气disc。很可能是您的答案得到了更好的优化,并且显示了更多的技巧,PPCG的投票者经常对此表示赞赏。