首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Van Eck序列的第n项

Van Eck序列的第n项
EN

Code Golf用户
提问于 2019-06-10 21:17:07
回答 17查看 9K关注 0票数 48

输出Van Eck序列的第N项。

Van Eck序列被定义为:

  • 从0开始。
  • 如果最后一项是该项的第一次出现,则下一项为0。
  • 如果最后一项发生在前面,下一项是最近发生的后退多少步。

https://oeis.org/A181391

https://www.youtube.com/watch?v=etMJxB-igrc

https://www.youtube.com/watch?v=8VrnqRU7BVU

顺序:0,0,1 0,2,0,2,2,2,1,6,0,5,0,2,.

测试:

输入输出

  • 1%-0
  • 8-2
  • 19 -5
  • 27 -9
  • 52 . 42
  • 64 x-0

编辑

1索引是首选的,0索引是可以接受的;这可能会改变一些已经提交的解决方案。

请给我第九学期。

同样的(除了看到它已经发布的部分),代码高尔夫球手和数字爱好者似乎有一个相当好的重叠。

EN

回答 17

Code Golf用户

发布于 2019-06-10 21:22:02

R,62字节

代码语言:javascript
复制
function(n){while(sum(F|1)<n)F=c(match(F[1],F[-1],0),F)
+F[1]}

在网上试试!

反向构建列表;match返回F[-1]中的F[1]的第一个索引(前一个值)(列表的其余部分),如果没有找到匹配项,则返回0

F被初始化为FALSE,并在while循环的第一次传递时被强制为0

票数 10
EN

Code Golf用户

发布于 2019-06-11 23:17:33

Python,51字节

代码语言:javascript
复制
f=lambda n,i=1:n>i and[f(n,i+1),i][f(n-1)==f(n+~i)]

在网上试试!

输出False用于0。按字面意思实现规范,寻找最低的正整数i,例如f(n-1)==f(n-i-1)。如果这样的搜索导致了i>=n,那么前面的元素以前就没有出现过,所以我们生成了0

函数没有做一些合理的事情,比如将早期的值存储在列表中,而是在需要时从零开始递归地重新计算它们,有时是在不需要它们的时候。这使得该函数对于10以上的输入运行得非常慢。

票数 8
EN

Code Golf用户

发布于 2019-06-11 00:11:40

Wolfram语言(数学),48字节

代码语言:javascript
复制
#<1||Last[#-1-Array[#0,#-2]~Position~#0[#-1],0]&

在网上试试!

非零值是作为单例列表返回

票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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