ClojureでProject Euler(4)やってみた
ClojureでProject Eulerの問題4をやってみた。
左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。
では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。
こんな感じかな
(defn palin? [x] (= (reverse (str x))(reverse (reverse (str x))))) ;; 回文数の判定 (def numbers (for [x (range 100 1000) y (range 100 1000)] (* x y ))) ;; 対象となる数字の遅延シーケンス (apply max (filter palin? numbers)) ;; 数字の並びの中から回文数を探して最大値を得る
無理やりまとめると
(apply max (filter (fn [x] (= (reverse (str x))(reverse (reverse (str x))))) (for [ x (range 100 1000) y (range 100 1000) ] (* x y))))
で書けてしまう。
確かに超簡潔になるね...。
ただし、Clojure Boxのemacsみたいに()のネスティングを教えてくれるツールがないと死んじゃうねこれは(w
なお、答は906609であってると思うがどうでしょうか?
あと、これらが何と何の積か記録できるといいな...