Kolakoski序列
* * * *
拉格朗日计划
* * * *
Kolakoski序列

Kolakoski序列是一种自描述序列,它的第一和第二项是1,2,其它所有项也仅由数字1和2组成。

该序列中的项由这样的规则决定,把序列中由相同数字组成的连续子列分为一组,如此得到若干组,序列的第n项$K_n$就是第n组的长度。

例如该序列的前几项依次是1 2 2 1 1 2 1 2 2 1 2 2 1 1 2 1 1 2 2 1 2 1 1 2 1。。。

生成过程如下:

按给定的初值有$K_1=1\neq2=K_2$,因此第一组就是$K_1=1$,它的长度也是$K_1=1$。

第二组以2开头,它的长度是$K_2=2$,因此第三个数$K_3=2$。

从而第三组以$K_4=1$起,长度应该是$K_3=2$,因此$K_5$也等于1。

从而第三组以$K_6=2$起,长度应该是$K_4=1$,。。。。以此类推。

在一行中打印该序列的前1000项,相邻两项间用一个空格隔开。

注:原题面不甚清晰,此处作了详细的补充和解释。

本题难度:



解答

按组号遍历生成该序列即可。

最终代码有三行。

代码长度:60字节 vs. 全站第一:52字节。

a,i=[1,2,2],2
while i<666:a+=[i%2+1]*a[i];i+=1
print(*a+[1])