Problem 30

うみねこのなく頃にループ?戻った?隔週でみると話がわけわかめw死んだ人が生きてるのは不気味.おまもりひまりまで頑張ろう.
は!アニメを見てたら時間が…

print sum(x for x in xrange(1000,6 * 9**5) if x == sum([i**5 for i in map(int,str(x))]))

皆が大好き1行アンサー.
修正

ただしこれは5秒弱….codepadじゃかなりぎりぎり.たまにアウトになる.(2回中1回アウトになったw)
少し頑張れば2行になるけど少し早くなる.

lis = [i ** 5 for i in xrange(10)]
print sum([x for x in xrange(1000,6 * 9**5) if x == sum([lis[int(i)] for i in str(x)])])

で,この発想をインスパイアされた(listを使うことを)元はCだったのをもう少しpythonで短く書けるように関数化したのが次のソース.

def coco(n,lis):
    t = 0
    i = n
    while i:
        t += lis[i % 10]
        i /= 10
        if t > n:
            return False
    if n == t:
        return True
    return False

lis = [i**5 for i in xrange(10)]
print sum([x for x in xrange(1000,6*9**5) if coco(x,lis)])

圧倒的に速いので,ただし,str(),int()を使うと遅い.modとdivの方がstr(),int()より速いとみた!-'0'とかにしてみようかな.int()辞めてみよう.pythonはchar型でも-'0'ができないのか…

print sum(x for x in xrange(1000,6 * 9**5) 
if x == sum((ord(i)-ord('0'))**5 for i in str(x)))

でもordにしただけでも大分早くなった.4秒以上から3秒弱.1行でやる分には十分だと思う.一番早いのは行じゃない奴で1秒ちょいでした.
2行の方もord()使ったけど1行の方がはやかったので,いらない子になってしまったwwww
codepadでも時間が測れる余裕が出たので,結果url
http://codepad.org/34XmRX4A 1行で8秒弱
http://codepad.org/EJaPLor7 2行で8秒ちょい
http://codepad.org/OfASdMre 3秒
圧倒的ですね!でも1行が良いなぁ.

print sum(x for x in xrange(1000,6*9**5) if x == eval('**5+'.join(str(x)+'1')[:-2]))

evalりたかったw
どうしてもw使う意味がないけどまぁなんだろう多分一番短い?