Python Challenge をいまさら

むかーしに見たことがあるような気がするけど、そのときは一問も解いてなかったのでやってみた。

Level 0

0秒。
インタラクティブシェルでホゲっと。

Level 1

30分。

a = ''
for i in d:
    a += chr(ord(i) + 2)

という風に、バカチョンに2を足していったらアルファベットの範囲を越えてしまい、

a = ''
for i in d:
    a += chr(((ord(i) + 2 -96) % 26 ) + 96)

という風に、剰余をとったら、空白と記号まで消えてしまったので、

a = ''
for i in d:
    if 96 <= ord(i) and ord(i) <= 122:
        a += chr(((ord(i) + 2 -96) % 26 ) + 96)
    else:
        a += i

みたいなダサイ回答に。俺はもっとかっこいいコードが書きたいんだよ。

tt = string.maketrans(string.lowercase ,''.join([chr(i) for i in range(99, 123)])+ 'ab')
src.translate(tt)

模範解答はこんなの?回答のページがPHPのエラーで見れない。
アルファべットの2個ずらした並びの素敵な出し方がわからない…。

そして、URLへの適用方法がわからず、30分くらい悩んで、答えをみちゃった。ここで終わりですね。

Level 2

30分。
はじめはこんなのでやってたけど、

rec  = {}
for l in fd:
    for i in l:
        rec[i] = rec[i] + 1 if rec.has_key(i) else 1

普通に辞書に入れていただけなので、結果がソートされちゃった。
なので、

rec  = {}
for l in fd:
    for i in l:
        rec[i] = [rec[i][0], rec[i][1] + 1] if rec.has_key(i) else [len(rec)+1, 1]

for i in rec:
    li[rec[i][0]] = i

こんなので。なんか複雑な気がしてイヤン。

Level 3

15分。
やっぱり問題の意味というか、問題がどこにあるかでしばらく悩んだけど、forumの2つ目で問題の場所がわかった。
はじめはこんなんでやってたけど、

dst = []
for l in src:
    tmp = re.findall('[A-Z]{3}([a-z])[A-Z]{3}', l)
    if tmp: dst += tmp
"".join(dst)

EXACTLY three big bodyguardじゃなかったので、

dst = []
for l in src:
    tmp = re.findall('[a-z][A-Z]{3}([a-z])[A-Z]{3}[a-z]', l)
    if tmp: dst += tmp
"".join(dst)

で。