Can't find error in code (Project Euler #11 (Haskell))

Michael Mafeni

I can't seem to find out why my code isn't working. I think I'm correct and all the examples I've seen do the same thing I do. But when I execute it, I get a different answer. Could someone please help me in finding out what's wrong? (adj4 is my final answer)

type Grid = [[Integer]]

twentyGrid :: [Integer]
twentyGrid = [8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8,49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0,81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65,52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,36,91,22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80,24,47,32,60,99,3,45,2,44,75,33,53,78,36,84,20,35,17,12,50,32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70,67,26,20,68,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21,24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72,21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95,78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92,16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57,86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58,19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40,4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66,88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69,4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36,20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16,20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54,1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48]



rows :: Int -> [Integer] -> Grid --split grid into rows of length n
rows n [] = []
rows n xs = (take n xs):(rows n (drop n xs))

cols :: Int -> [Integer] -> Grid
cols n  = (transpose.rows n)

rowGrid :: Grid
rowGrid = rows 20 twentyGrid

colGrid :: Grid
colGrid = cols 20 twentyGrid

getDiag ::  Grid-> [Integer] --get a diagonal
getDiag [] = []
getDiag xss
    | head xss == [] = []
    | otherwise  = ((head.head) xss) : (getDiag ((map(drop 1).(drop 1)) xss))

adjac :: Int -> [Integer] -> [[Integer]] -- get all possible combinations of n numbers
adjac 0 xs = []
adjac n [] = []
adjac n (x:xs)
    | length (x:xs) > n = (take n (x:xs)) : (adjac n xs)
    | otherwise          = [x:xs]

diags :: Grid -> Grid
diags [] = []
diags (xs:xss)
    | (xs == []) = []
    | otherwise   =(getDiag (xs:xss)): (diags (map (drop 1) (xs:xss)))

upDiag :: Grid --get upper diaonals
upDiag = diags rowGrid

lowDiag :: Grid -- get lower diagonals
lowDiag = diags colGrid

allCells :: Grid --every diagonal column and row merged together
allCells = rowGrid ++ colGrid ++ upDiag ++ lowDiag

adj4 :: Integer --find largest product of 4 adjacent numbers
adj4 = (maximum.map maximum.map (map product).map (adjac 4)) allCells

testAdj :: [[Integer]]
testAdj = (map (map product).map (adjac 4)) allCells
K. A. Buhr

It looks like you are handling the diagonals that go from upper left to lower right, both above the main diagonal (upDiag) and below the main diagnoal (lowDiag). However, you don't seem to be handling diagonals in the other direction. For example, if you look in the top-left corner of the grid:

08 02 22 97
49 49 99 40 ...
81 49 31 73
52 70 95 23
...

you have no code checking diagonals like the bolded one.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Project Euler - How is this haskell code so fast?

From Dev

Project Euler - How is this haskell code so fast?

From Dev

Can't find the error in the code

From Dev

the code for project euler #5 doesn't works

From Dev

Project Euler 3 - Haskell

From Dev

Project Euler 8 - Haskell

From Dev

Project Euler #18 in Haskell

From Dev

Project Euler #11 logic

From Dev

can't find error in this javascript code

From Dev

Can't find the error in this code. (SIGSEGV)

From Dev

Can't find syntax error in code

From Dev

Can't find the infinite loop in my Haskell code

From Dev

Project Euler #14 Tips in Haskell?

From Dev

Haskell-Project Euler 4

From Dev

Haskell-Project Euler 4

From Dev

Project Euler # 11 Numpy way

From Dev

Project euler 12 python code doesn't run, is it slow or what?

From Dev

Project Euler #8, can't seem to get the correct answer

From Dev

MS Access Can't Find Project or Library Error

From Dev

Python Key Error=0 - Can't find Dict error in code

From Dev

Python Key Error=0 - Can't find Dict error in code

From Dev

Can't build project after updating to gradle 5.1.1 and project to java 11. Invalid type code

From Dev

Java Code for Project Euler #12

From Dev

Project Euler prob 10 using haskell

From Dev

Questions regarding Haskell solution of Project Euler 14

From Dev

Project Euler #2 Solution from the Haskell Wiki

From Dev

"Can't find crate for `std`" — compiler error with trivial code

From Dev

Can't find error in Google Analytics API tracker code

From Dev

Can't find error from atmega128 C code