のてすきあ − 完全独習非プログラマー −

Haskell で Project Euler を解く素人遊び

Problem 28

右回りに数字を配置していき正方形を作ったときの対角線の和を求める。

f:id:mitstream:20200419110742p:plain

うーん…。これはハッキリ言って手計算で答えが出ちゃうんだよな…。数字を規則的に並べて和を取るのだから、何らかの公式が作れそうだと考えるべきで、実際簡単に公式が導出できる。なのでHaskellの手を借りるまでもないのだが、無理やりコードを書いてみた。

一応ポイントは、N×Nの正方形に数字を並べると、一番右上の数がN2になるというところ。一辺の長さがNだから、左上はN2 - (N-1), 左下は N2 - 2(N-1), 右下は N2 - 3(N-1) 従って四つ角の数字を足せば 4N2 - 6(N-1) となる。これを N = 1,3,5,...,1001と足し合わせれば良い。N=1の時に1を重複してカウントしていることに注意して、最後に重複分の3を引くのを忘れずに。

プログラミングの練習にならない…☆