Problem 4 - Project Euler

左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。

では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。

翻訳の息抜きがてら久しぶりにProject Eulerやった。昔見たときはこんなのどうやって解くんだってスルーした記憶があるけど、今回は問題みた瞬間に解き方がわかった。

def pe4():
    # 3桁の数字の全リストを用意 
    ls = xrange(100,1000)
    # 掛け合わせる
    ls = [x*y for x in ls for y in ls]
    # 数値のままだとリバースできないので文字列にする
    ls = map(str, ls)
    # 要素を自身をリバースしたものと比較して真になるものを抽出する
    # Pythonの文字列をリバースするにはスライスのステップ数の所に-1を渡す
    ls = filter(lambda x: x == x[::-1], ls)
    # max関数を適用して最も大きい数値を表示させる
    # maxに要素を渡す前にちゃんと数値に戻しておかないと、変な結果になる。
    print max(map(int, ls))

if __name__ == '__main__':
    pe4()

これくらいはすぐ解けるくらいには力ついてたみたい。