【原创】pythonchalleng——第10题

来源:互联网 发布:好看的香港电影 知乎 编辑:程序博客网 时间:2024/06/07 11:04

        第十题的网址:http://www.pythonchallenge.com/pc/return/bull.html,下面是该题目的截图,特此留念。

2011-07-31_211459

页面上的提示信息是问我们a[30]的长度是多少,但是a在哪呢?我们还是看看页面的源代码吧,那里应该有很多有用信息。参观完源代码后,发现图片上的牛是可以点击的,点进去后,得到如下信息:

a = [1, 11, 21, 1211, 111221, 
我们找到a了,但是它也没有下标为30的元素呀……哦,有可能上面的元素之间存在某些关系,通过这些关系可以推导出a[30]的数值。我们接下来需要做的就是逻辑推理,Fighting!
5分钟……
10分钟……
15分钟……
……
郁闷了……就是看不出什么有效的关系……还是求教于网络吧……不看不知道,一看吓一跳!它们的关系如下:
a[0]=1
1:1个1,把这些数字串起来,就是a[1]=11 
11:2个1,把这些数字串起来,就是a[2]=21 
21:1个2,1个1,把这些数字串起来,就是a[3]=1211 
1211: 1个1,1个2,2个1,把这些数字串起来,就是a[4]=111221
111221:3个1,2个2,1个1,把这些数字串起来,就是a[5]=312211
……
这下大家知道其中的规律了吧,好了,现在就可以上代码了。
__author__ = 'hengha' 
import re 
def fun9(string): 
    first=str(string) 
    rex=re.compile(r'(\d)(\1*)') 
    for k in range(30): 
        data=rex.findall(first) 
        temp='' 
        for i,j in data: 
            temp += str(1+len(j))+i 
        first=temp 
    print len(first) 
if __name__== '__main__': 
    fun9('1')

         我们得到的答案就是5808,把URL中的bull替换为5808,看看会有什么效果。哈哈,顺利进入第11题,网址为:http://www.pythonchallenge.com/pc/return/5808.html

        需要强调一下的是我们使用到了正则表达式的技术来提取符合要求的字符串,例如111和22等。我们可以理解\d的意思,就是代表数字,而\1则是引用编号为1的分组匹配到的字符串,即\1可以用来表示第一个匹配的数字,*表示这个数字可以重复0次或多次。因为\d已经匹配了一次,所以后面应该使用\1*,而不是\1+。

0 0
原创粉丝点击