http://projecteuler.net/index.php?section=problems&id=28
スパイラルの位置の列を作ります。
let count n = Seq.initInfinite (fun k -> k + n) let spiral = seq { yield (0, 0) for n in count 1 do for y in n-1..-1..-n do yield (n, y) for x in n-1..-1..-n do yield (x, -n) for y in 1-n..n do yield (-n, y) for x in 1-n..n do yield (x, n) } let is_diagonal x = abs (fst (snd x)) = abs (snd (snd x)) let N = 1001 let s = Seq.zip (seq { 1..N*N }) spiral printfn "%d" (Seq.sum (Seq.map fst (Seq.filter is_diagonal s)))