done is better than perfect

自分が学んだことや、作成したプログラムの記事を書きます。すべての記載は他に定める場合を除き個人的なものです。

project euler problem4

project eulerの第四問目です

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

3桁程度なので,愚直にやってOKです.数を真ん中で分けて反転させて……と考え始めるとドツボにハマるので,単純にある数を反転させて,オリジナルな数値と一緒だったら回文であると判定します.

def yield_palindromic():
for i in xrange(1, 1000000):
    reverse_i = 1000000 - i
    if str(reverse_i) == str(reverse_i)[::-1]:
        yield reverse_i

f = yield_palindromic()

def div(n):
    for i in range(100, 1000):
        for j in range(100, 1000):
            if i * j == n:
                return True
            else:
                False
for x in f:
    if div(x):
        print x

このコード書いたときは思いつかなかったのですが,range関数を反転させるには

for i in reversed(range(1, 100)):

と書いたほうがシンプルです