四肢拼图


21

4个4拼图是涉及使用正好四个4S(并且没有其他号码),并定义了一组操作的从0到每一个数字的给定最大的热门休闲数学谜题。

在此版本中,仅允许以下运算符:

  • 可以使用任何分组符号
  • 加法(+),减法(-),乘法(*),除法(/
  • 阶乘(!),伽马函数Γ
  • 幂(^),平方根(
  • 串联(例如44为2 4
  • 小数点(例如4.4为2 4秒),横线(例如.4~ = 4/9

适用标准操作顺序。

给定一个介于0和100之间(含0和100)的输入,您的程序应为该输入生成正确的解决方案。如果程序对任何输入输出无效的解决方案,则该程序无效。

例如,输入为0,您的程序可能会生成44-44

不允许使用外部模块。_.4~Overbar运算符仅允许使用-即,4小数点后只能有一个。

这就是代码高尔夫,因此最短的解决方案将获胜。


编辑:要特别清楚,该程序必须输出一组上述操作,并将它们精确地应用于4 4s-不能多也不能少。此外,.4 = 4/10是有效术语,算作仅使用一个4


没有舍入运算?:-(
John Dvorak

@JanDvorak错误,不,那是不允许的。
波动率

都可以使用gamma和阶乘吗?
John Dvorak

可以使用@JanDvorak列出的所有内容(但仅列出的内容)。
波动率

是否允许将阶乘输出为前缀函数(!(4)而不是(4)!)?
John Dvorak

Answers:


6

GolfScript(129个字符*)

[4.`2'√4'24'4!'6'Γ4'1'Γ√4'120'ΓΓ4']2/:F{.F=[[44.`]]*\{`{+{'+*-'1/{:^;.[~@[\]{'()'1/*}%^*@@^~\]\}/}:|~2/~\+|;}+F/}%+}3*\{\0==}+?1=

在我的PC上,运行时间约为4分钟。通过在.&后面立即添加唯一性操作,可以以两个字符为代价获得适度的加速%+

我用预编码的表达式124624120,和44,并建立从只使用了休息了+*-。这样,我不需要在程序本身中进行任何非整数运算。我试图通过在开头放置更简单的预编码值来获得更简单的表达式。

所有这些值都是必填,并且必须同时支持两个减法方向(complex_expression - simple_expression反之亦然)。还必须包括一些需要用括号括起来的运算符(特别是a*(b-c)),因此我会不加选择地将所有子表达式放在括号中。

*我计算的是Unicode代码点,假设该程序是UTF-8编码的,并且在下面这样一个事实:除非您使用最新版本的Ruby运行解释器,否则实际上会将其视为ASCII字符。如果您对此非常担心,请使用GGamma和vsqrt。

好吧,严格来说,我可以4411as 44/471as 代替√(Γ√4+(ΓΓ4+Γ√4)!),但这不是一个很好的权衡。


7

Python 155字节

h={4:'4',24:'4!',6:'â4',.4:'.4',1:'âû4',4/9.:'.4~'}
f={}
def g(r,s='24',y='4!'):f[eval(s)]=y;[g(r-1,s+o+`k`,y+o+h[k])for k in h for o in'/*-+'if r]
g(3)

\xEF\xBB\xBF尽管文件应以ANSI格式保存,但前三个字节()是UTF-8字节顺序标记。的ûâ将interpretted为Γ分别在CP437CP850,它应该工作在几乎所有的Windows中。

在我的计算机上,运行时间约为0.4s。

用法示例(为文件命名four_fours.py):

$ python
>>> from four_fours import f
>>> f[39]
'4!+4!/.4/4'
>>> f[87]
'4!*4-4/.4~'
>>> for i in range(101): print i, f[i]
0 4!+4!-4!-4!
1 4!+4!/4!-4!
2 4!-4!+Γ4-4
3 4!-4!+4-Γ√4
4 4!+4!/Γ4-4!
.
.
.
96 4!+4!+4!+4!
97 4!*4!/Γ4+Γ√4
98 4!*4+Γ4-4
99 4!*4+4-Γ√4
100 4!*4!/Γ4+4

结果为0..100。由于哈希的迭代方式,它倾向于4!尽可能多地使用。

编辑:通过添加Γ√4 = 1,消除了对任何分组的需要,并通过删除了√4 = 2不再需要的字节,节省了一些字节。


4

J,175161个字符

   f=.')',~'(',;@((<;._2'+ - * % .4 .4~ g(r(4)) r(4) 4 g(4) 4! ( ) '){~(143402 A.i.9)
      /:~(12,11,0,6$0 4 4)+(9$4 7 7)#:((,@(+/,-/,*/,%/)~)^:2,0.4 4r9 1 2 4 6 24)&i.)

   f 1
(.4+.4)+(.4%r(4))

   f 42
(r(4)+4)+(g(4)*g(4))

   f 100
(r(4)+r(4))+(4*4!)

检查格式是(v op v) op (v op v)在哪里v={0.4 4/9 1 2 4 6 24}op={+ - * /}

完整的0..100结果


我认为.4此游戏无效。
John Dvorak

@JanDvorak是-也许我应该更清楚一点
波动率
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.