StevenPZChan
StevenPZChan
1 min read

Categories

Tags

继续挑战


第10题地址bull.html

  • bull.jpg
  • 网页标题是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个“1”,即11
  2. 11:读作2个“1”,即21
  3. 21:读作1个“2”,1个“1”,即1211
  4. 1211:读作1个“1”,1个“2”,2个“1”,即111221
  5. 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,打开来到下一题。

总结:题目很好理解,数列不难,正则很好用。

本题代码地址10_bull.ipynb