Van Eck序列
* * * *
拉格朗日计划
* * * *
Van Eck序列

Van Eck序列是按如下规则生成的序列:

1) 首项$v_0=0$。

2) 若$v_{n-1}$是第一次在序列中出现,那么$v_n=0$。

3) 若$v_{n-1}$不是第一次在序列中出现,且上一次出现的位置是在$v_k$那么$v_n=n-1-k$。

该序列的前几项是

0         (根据规则1)
0 0       (根据规则2)
0 0 1     (根据规则3)
0 0 1 0   (根据规则2)
0 0 1 0 2 (根据规则3)


打印该序列的前1000项,每个数单独一行。

本题难度:



解答

用i,a记录序列的长度和末项,用b记录下一项,用字典d记录每个元素最后一次出现的位置,用i记录a的位置。

打印a后注意按b,d,a,i的顺序更新变量即可。

最终代码有两行。

代码长度:63字节 vs. 全站第一:56字节。

i=a=0;d={}
while i<1000:print(a);b=i-d.get(a,i);d[a]=i;a=b;i+=1