24 lines
703 B
Haskell
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)
|