由于斐波纳契数字和序列似乎是代码高尔夫的热门话题,我认为用基思数编写高尔夫代码可能是一个有趣的挑战。
因此,我提出了一个挑战,就是创建一个函数,这个函数接受一个整数,并根据这个数字是基思数还是非基思数来返回一个真假。
更多关于基思数字的信息
在娱乐数学中,基思数或repfigit数(重复斐波那契数的简称)是按以下整数顺序排列的数字: 14、19、28、47、61、75、197、742、1104、1537、2208、2580、…。
Numberphile有一段视频解释如何计算基思数。但基本上你拿一个数字的数字。将它们加在一起,然后取原始数字的最后一个数字,并将它们加到计算的总和中,然后漂洗和重复。以身作则。
14 1+4=5 4+5=9 5+9=14
一个整数。
如果这个号码是基思号码的话。如果不是假的话。
发布于 2012-12-30 04:48:42
有时CL可能很难读。
(defun k(n)(do((a(map'list #'digit-char-p(prin1-to-string n))(cdr(nconc a(list(apply'+ a))))))((>=(car a)n)(and(> n 9)(=(car a)n)))))避免水平滚动的一些格式设置:
(defun k(n)
(do
((a(map'list #'digit-char-p(prin1-to-string n))(cdr(nconc a(list(apply'+ a))))))
((>=(car a)n)(and(> n 9)(=(car a)n)))))测试:
(loop for i from 10 to 1000
if (k i)
collect i)
=> (14 19 28 47 61 75 197 742)发布于 2012-12-28 14:57:00
我希望我可以参加我自己的挑战。
let K n=
let rec l x=if n<10 then false else match Seq.sum x with|v when v=n->true|v when v<n->l(Seq.append(Seq.skip 1 x)[Seq.sum x])|_->false
string n|>Seq.map(fun c->int c-48)|>l编辑修正了一个关于小数字的错误。
https://codegolf.stackexchange.com/questions/9319
复制相似问题