Arantium Maestum

プログラミング、囲碁、読書の話題

Clojure入門 - Project Eulerを解いてみる 問28

第二十八問

数字の渦の角の和。

5x5の渦の時、角の数字は1, 3, 5, 7, 9, 13, 17, 21, 25。

それを1x1、3x3、5x5の層に分けるなら[1] [3, 5, 7, 9] [13, 17, 21, 25]となる。

1x1を無視するなら、各層で[n2 - 3(n-1), n2 - 2(n-1), n2 - (n-1), n2]となっている。これは渦の特性からも導き出される。

なのでコードに落とし込むなら以下のようになる。

(->> (range 3 (inc 1001) 2)
     (map #(- (* 4 % %) (* 6 (dec %))))
     (apply +)
     inc)

最後に1x1の部分を足しておくのを忘れずに。