首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试给定的号码是否为基思号码

测试给定的号码是否为基思号码
EN

Code Golf用户
提问于 2012-12-28 14:57:00
回答 9查看 2.7K关注 0票数 16

由于斐波纳契数字和序列似乎是代码高尔夫的热门话题,我认为用基思数编写高尔夫代码可能是一个有趣的挑战。

因此,我提出了一个挑战,就是创建一个函数,这个函数接受一个整数,并根据这个数字是基思数还是非基思数来返回一个真假。

更多关于基思数字的信息

在娱乐数学中,基思数或repfigit数(重复斐波那契数的简称)是按以下整数顺序排列的数字: 14、19、28、47、61、75、197、742、1104、1537、2208、2580、…。

Numberphile有一段视频解释如何计算基思数。但基本上你拿一个数字的数字。将它们加在一起,然后取原始数字的最后一个数字,并将它们加到计算的总和中,然后漂洗和重复。以身作则。

14 1+4=5 4+5=9 5+9=14

输入

一个整数。

输出

如果这个号码是基思号码的话。如果不是假的话。

EN

回答 9

Code Golf用户

发布于 2012-12-30 04:48:42

通用Lisp,134

有时CL可能很难读。

代码语言:javascript
复制
(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)))))

避免水平滚动的一些格式设置:

代码语言:javascript
复制
(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)))))

测试:

代码语言:javascript
复制
(loop for i from 10 to 1000
      if (k i)
      collect i)

=> (14 19 28 47 61 75 197 742)
票数 2
EN

Code Golf用户

发布于 2012-12-28 14:57:00

F# - 184 chars

我希望我可以参加我自己的挑战。

代码语言:javascript
复制
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

编辑修正了一个关于小数字的错误。

票数 1
EN

Code Golf用户

发布于 2020-12-28 07:48:20

外壳,11字节

代码语言:javascript
复制
S£o¡oΣ↑_L¹d

在网上试试!

返回基思数所在的迭代,否则为0。

这个挑战对胡斯克来说是完美的。

解释

代码语言:javascript
复制
S£o¡oΣ↑_L¹d
   ¡o       create an infinite list, starting with
          d the digits of the input
      ↑_L¹  take length(input) numbers from the end
     Σ      and sum to compute the next number
S£o         is the input present in the list?
票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/9319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档