TONY0922のブログ

学んだことを適当に記録していくブログです。主にRuby, Java, PHPで仕事してます。更新頻度はそんなに高くないので、ご了承下さい。

ProjectEular Problem 4 「最大の回文積」

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%204

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

class Test004 
    def max_anagrams(min1, max1, min2, max2)
        ary = []
        for i in min1..max1
            for j in min2..max2
                num = i * j
                if num == self.reverse_str(num.to_s).to_i
                    ary.push(num)
                end
            end
        end
        ary.max
    end

    def reverse_str(str)
        str.split(//u).reverse.join
    end
end

tmp = Test004.new
print tmp.max_anagrams(100, 999, 100, 999)
906609

愚直に書くと、こんな感じかな。
1000 × 1000 回 ループするので、そこそこ時間がかかる。
他にいい方法ってあるのかしら。