[Haskell-cafe] Hints for Euler Problem 11
L.Guo
leaveye.guo at gmail.com
Fri Aug 17 05:53:17 EDT 2007
Hi.
My plan is just add some *unusable* data to make diagonal grid normally.
Here this is.
p011_input = input ++ (transpose input) ++ diagInput ++ diagInputT
where diagInput = p011_toDiag input
diagInputT = p011_toDiag . (map reverse) $ input
input = [ [08,02,22,97,38,15,00,40,00,75,04,05,07,78,52,12,50,77,91,08],
[49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,04,56,62,00],
... ,
[01,70,54,71,83,51,54,69,16,92,33,48,61,43,52,01,89,19,67,48] ]
p011_toDiag = (map remove) . transpose . (map append) . addIndex
where addIndex = zip [0..]
append (n,y) = replicate n (-1) ++ y ++ replicate (19-n) (-1)
remove = filter (-1/=)
p011_toGroups x = case x of
(a:b:c:d:xs) -> [a,b,c,d] : p011_toGroups (b:c:d:xs)
_ -> []
p011_solve = putStrLn . show $ (foldl1 max) . (map product) . concat . (map p011_toGroups) $ p011_input
------------------
L.Guo
2007-08-17
-------------------------------------------------------------
From: Ronald Guida
At: 2007-07-20 11:39:50
Subject: [Haskell-cafe] Hints for Euler Problem 11
To handle the diagonals, my plan is to try to extract each diagonal as
a list of elements and put all the diagonals into a list; then I can
use maxHorizontal.
I came up with this function to try to extract the main diagonal.
> getDiag :: [[a]] -> [a]
> getDiag = map (head . head) . iterate (tail . map tail)
The problem is, this function doesn't work unless I have an infinite
grid.
More information about the Haskell-Cafe
mailing list