外观数列
* * * *
拉格朗日计划
* * * *
外观数列

外观数列的首项是1,之后每一项$a_n$都籍由观察$a_{n-1}$而得。

将$a_{n-1}$分割成若干段,每一段中各数位上的数字都相同,而相邻两段数位上的数字不同,而$a_n$就由各段的长度和该段数位上的数字拼接而成。

例如,若$a_{n-1}=111221$,那么它可以分成111、22、1三段,长度分别是3、2、1,数位上的数字分别是1、2、1,因此$a_n=312211$(即3个1,2个2,1个1)。

打印外观数列的前20项,每个数一行。

本题难度:



解答

用标准库的itertools.groupby得到分段信息后拼接输出。

最终代码有三行。

代码长度:99字节 vs. 全站第一:74字节。

from itertools import*
x='1'
exec('print(x);x="".join(str(len([*g]))+k for k,g in groupby(x));'*20)