Problem 28

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 both diagonals is 101.

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

ぴょんぴょんはねるイメージで作った。ぴょんぴょんを合成しまくるためか

stack space overflow

関数が多すぎるからか?

少し工夫してみたが・・・

あまり変わらない。

import Data.List
jump n (xs,ys) = let (z:zs) = drop n ys in (z:xs,zs)
jumps' n =foldl1 (.) . replicate 4 $ jump n
jumps lim=foldl (flip ($)) ([],[1..]). unfoldr j $ 
where j p | p > lim = Nothing
| p==  = Just(jump ,1)
| p >  = Just(jumps' p,p+2)
p028 n = fst$jumps n
main = print.sum$p028 999
More Reading
Newer// Problem 23
Older// Problem 29