[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