Starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral is formed as follows:

21 22 23 24 25
20  7  8  9 10
19  6  1  2 11
18  5  4  3 12
17 16 15 14 13

It can be verified that the sum of the numbers on the diagonals is 101.

What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed in the same way?


In [33]:
//let limit = 1001 * 1001
let limit = 6 * 6

let rec spiralNumbersTo1001 skip index n =
    if index >= limit then [index]
    else
        if n <= 1 then [index] @ (spiralNumbersTo1001 (2+skip) (2+skip+index) 4)
        else [index] @ (spiralNumbersTo1001 skip (skip+index) (n-1))

let plus1 n = n + 1

spiralNumbersTo1001 2 3 4
//|> List.sum
//|> plus1


Out[33]:
[3; 5; 7; 9; 13; 17; 21; 25; 31; 37]

In [ ]: