APL,36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
输出量 1
如果是基思0
则,否则
GolfScript再次罢工!
编辑
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
使用减右(⊢/
)代替取负1(¯1↑
),直接保存1个字符,并间接从Disclose(⊃
)保存1个字符
说明
⍎¨⍕x←⎕
接受评估后的输入(视为数字)并将其分配给x
。将其转换为字符数组(在其他语言中也称为“字符串”),并遍历每个字符(数字),将其转换为数字。因此,这将导致数字的数字数组。
{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}
是主要的“循环”功能:从数组中
+/⍵↑⍨-⍴⍕x
获取最后一个⍴⍕x
(数字中的数字x
)并求和。
⍵,
将其连接到数组的末尾。
(x>⊢/⍵)
检查数组上的最后一个数字(+/⍵↑⍨-⍴⍕x
尚未连接)是否小于,x
并在新数组上多次返回1
或0
∇⍣
执行此函数。因此,如果最后一个数字小于x
,则此函数重复出现。否则,只需返回新数组
执行完函数后,数组将包含直到两个数字大于或等于的总和x
(例如,14
将生成1 4 5 9 14 23
,13
将生成1 3 4 7 11 18 29
)。
最后检查每个数字是否等于x
并输出结果二进制的总和数组。
编辑
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
添加2个字符:-( 0
如果输入是一位数字则输出
另一个编辑
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
说明
该函数现在1↓
从数组中删除第一个数字(),而不是获取最后一个⍴⍕x
(↑⍨-⍴⍕x
)。
但是,这种方法1=
不足以处理一位数字。因此,它现在在检查等于之前将数组中的最后一个数字删除x
,添加1个字符
您猜对了:编辑
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
比较x
到新添加的项目,而不是旧的最后一个项目,所以下降的第一个(而不是最后)项目检查平等之前x
是足够了,节省了减号。使用另一种形式的Power运算符保存另外3个(⍣
)
然后出现25个字符的gs答案(Orz)
最后编辑
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
不敢相信我错过了。
不能再打高尔夫球了。