塞克斯的序列


9

定义

  • a(1) = 1
  • a(2) = 2
  • a(n)是最小的数字k>a(n-1),它避免的任何3项算术级数a(1), a(2), ..., a(n-1), k
  • 换句话说,a(n)是的最小数目k>a(n-1),使得不存在xy其中0<x<y<na(y)-a(x) = k-a(y)

算出例子

对于n=5

我们有 a(1), a(2), a(3), a(4) = 1, 2, 4, 5

如果为a(5)=6,则2, 4, 6形成算术级数。

如果为a(5)=7,则1, 4, 7形成算术级数。

如果为a(5)=8,则2, 5, 8形成算术级数。

如果为a(5)=9,则1, 5, 9形成算术级数。

如果为a(5)=10,则找不到算术级数。

因此a(5)=10

任务

给定n,输出a(n)

眼镜

  • n 将是一个正整数。
  • 您可以使用0索引而不是1索引,在这种情况下n可以为0。如果您使用的是0索引,请在答案中注明。

计分

由于我们试图避免3项算术级数,并且3是一个小数,因此就字节数而言,您的代码应尽可能小(即短)。

测试用例

测试用例是1索引的。您可以使用0索引,但请在答案中进行指定。

1     1
2     2
3     4
4     5
5     10
6     11
7     13
8     14
9     28
10    29
11    31
12    32
13    37
14    38
15    40
16    41
17    82
18    83
19    85
20    86
10000 1679657

参考文献


2
有关。(如果我正确理解了您的挑战。)
Martin Ender

@MartinEnder您确实正确理解了我的挑战。
Leaky Nun

Answers:



6

Haskell,37 36 32字节

使用基于0的索引在OEIS条目中使用给定的公式。感谢@nimi 4个字节!

a 0=1;a m=3*a(div m 2)-2+mod m 2

3

Python 3,28个字节

lambda n:int(bin(n)[2:],3)+1

一个匿名函数,它通过参数获取输入并返回结果。这是零索引的。

怎么运行的

lambda n    Anonymous function with input zero-indexed term index n
bin(n)      Convert n to a binary string..
...[2:]     ...remove `0b` from beginning...
int(...,3)  ...convert from base-3 to decimal...
...+1       ...increment...
:...        and return

在Ideone上尝试


2

Python 3,113个字节

def f(n):
 i=1;a=[]
 for _ in range(n):
  while any(i+x in[y*2for y in a]for x in a):i+=1
  a+=[i]
 return a[n-1]

伊迪恩!


2

红宝石, 28 24字节

使用与Dennis相同的方法,并从0开始的索引:

->n{n.to_s(2).to_i(3)+1}

在repl.it上运行测试用例:https ://repl.it/Cif8/1



0

Java 8,52 46字节

0索引。

i->Integer.valueOf(Integer.toString(i,2),3)+1;

您不需要,return但之后需要分号
Leaky Nun

这个不说分号的答案;我可以用任何一种方式更改它,但是是否以分号为共识?
贾斯汀

恩,那是他们告诉我的。我不知道共识是否如此。
Leaky Nun

好吧,反正加分号比以前还短:)
贾斯汀
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.