# [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
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.

```