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←⎕
不敢相信我错过了。
不能再打高尔夫球了。