Problem 28 (Project Euler) [原文]
1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される:
(表略)
両対角線上の数字の合計は101であることが確かめられる.
1001×1001の螺旋を同じ方法で生成したとき, 対角線上の数字の合計はいくつだろうか?
とりあえず、対角線上に位置する数字を下記のような配列で表記してみました。
[[1], [3, 5, 7, 9], [13, 17, 21, 25], …]
これより、i番目の部分数列は、末項:(2 * i + 1)2、公差:2 * iの等差数列であることがわかります。ただし、i > 0
全体の矩形が1001×1001としたときの最後尾の部分数列の末項は10012なので、先頭を除く部分数列の個数は500個であることがわかります。
ここまでわかれば、メソッド"Array#flatten" でつぶして総計を求めるもよし、逐次加算で求めるもよし…でしょう。