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()
これくらいはすぐ解けるくらいには力ついてたみたい。