Wednesday, April 27, 2011

Python challenge level 10

from itertoolsmodule import groupby

def morris(n):
    result = []
    l = [list(g) for k, g in groupby(str(n))]
    for i in l:
        result.append(str(len(i)))
        result.append(i[0])
    return ''.join(result)

fr = '1'
for i in range(30):
    fr = morris(fr)

print len(fr)

這題一開始給的數列很有趣:

a = [1, 11, 21, 1211, 111221, ....

我一開始先試了幾個跟巴斯卡有關的變形,但都沒什麼結果

後來我把每個位數加起來的值變成這樣 >>> [1, 2, 3, 5, 8]

看到這我很高興,因為這不就是鼎鼎有名的費氏數列嗎(雖然開頭少個"1")

然後他的位數是這樣的 >>> [1, 2, 2, 4, 6]

扣掉第一個1不看,也是費氏的變形,這題就是問第30項有幾位數

正當我開心的把第30項的位數打進去卻發現不對

真是信心的一大打擊,後來只好google一下這個數列

發現這種數列好像叫做"Morris"數列

其實還蠻有趣的

1 comments:

Yo Learn said...

好像真的蠻有趣的

Post a Comment