euler/Problem028.hs

24 lines
703 B
Haskell

-- 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?
ne = 1 : zipWith (+) nw [2,4..]
se = zipWith (+) ne [2,4..]
sw = zipWith (+) se [2,4..]
nw = zipWith (+) sw [2,4..]
-- Sum of diagonals of an m by m spiral; m = 2*n + 1.
diagSum n = sum (take (n+1) ne ++ take n se ++ take n sw ++ take n nw)
main = print $ (diagSum 2, diagSum 500)