继续挑战
第10题地址bull.html
- 网页标题是
what are you looking at?
,题目内容是len(a[30]) = ?
,源码里面没有隐藏内容
看到上一题画出来的牛的真面目了!
同样以牛的轮廓圈起来的区域有一个超链接,点进去是这样的内容
a = [1, 11, 21, 1211, 111221,
这样的话,结合题目内容一看,思路也是很清晰的。
a
是一个数列,我们要求出a[30]
的位数。关键是a
数列是什么规律呢?
懂行的一看就懂了,反而是数学太好的想不出来,因为它不是任何的数学规律。
外观数列(Look-and-say sequence)第n项描述了第n-1项的数字分布。它以1开始:
- 1:读作1个“1”,即11
- 11:读作2个“1”,即21
- 21:读作1个“2”,1个“1”,即1211
- 1211:读作1个“1”,1个“2”,2个“1”,即111221
- 111221:读作3个“1”,2个“2”,1个“1”,即312211
1, 11, 21, 1211, 111221, 312211, 13112221, 1113213211, … (OEIS中的数列A005150)
From wikipedia.org
废话不多说,直接上代码,用正则应该会容易一些:
from itertools import islice
import re
def look_and_say():
num = '1'
while True:
yield num
m = re.findall(r'((\d)\2*)', num)
num = ''.join(str(len(pat[0])) + pat[1] for pat in m)
a = list(islice(look_and_say(), 31))
print(len(a[30]))
5808
将网址改成5808.html,打开来到下一题。