読者です 読者をやめる 読者になる 読者になる

はてブロ@ama-ch

https://twitter.com/ama_ch

Python Challenge Level10

Python Challenge

※ネタバレ有り


やっとレベルが2桁になったよ!

問題

前回より、
http://www.pythonchallenge.com/pc/return/bull.html
idとpassを聞かれたら"huge"と"file"で。

考え方

牛の写真があって、下に
「len(a[30]) = ?」
と書かれています。


画像の牛部分がリンクになっているのでクリックすると、

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

http://www.pythonchallenge.com/pc/return/sequence.txt

この数列をa[30]まで求めれば良い訳ですね!


・・・と、ここまで辿り着いたのが約10日前。数列苦手なのとゴチャゴチャしたループが書けなくて、やっとこさ書きました。かなりひどいものをorz


とりあえず、数列の謎を解かないといけませんね!
しばらく考えても分からないのでグーグル先生先生に聞きました!
1 11 21 1211 111221 - みずぴー日記
こちらで詳しく解説されています。
「カッコウはコンピュータ〜」で出てきてたのかこれ。読んだの5年くらい前だから全然覚えてなかった><


あとはこれをコンピュータにやらせれば良いのです。

回答

#!/usr/bin/env python
#! -*- coding: utf-8 -*-
""" level 10
http://www.pythonchallenge.com/pc/return/bull.html
"""
import time

def seq(base):
    gen = []
    cnt = 1
    if len(base) <= 1:
        print ("1\n2")
        seq("11")
    else:
        for i in range(1, len(base)):
            if base[i] == base[i-1]:
                cnt += 1
            else:
                gen.append(str(cnt))
                gen.append(base[i-1])
                cnt = 1
        gen.append(str(cnt))
        gen.append(base[i])

        next = "".join(gen)
        print len(next)
        time.sleep(1)
        seq(next)
        

if __name__ == "__main__":
    seq("1")

コードきたねえええええええええ
なんというやっつけ仕事・・・・
ま、まあ動くからね、一応。数学苦手だし。関係ないですね><


実行結果

1
2
2
4
6
6
8
10
14
20
26
34
46
62
78
102
134
176
226
302
408
528
678
904
1182
1540
2012
2606
3410
4462
5808

31個目まで自力で数えるのもバカみたいだった・・・
とにかく答えは5808です。

感想

なんだろうこの敗北感は・・・
修行が足りません><