diff --git a/src/projectEuler/question18.hs b/src/projectEuler/question18.hs new file mode 100644 index 0000000..c3d70b9 --- /dev/null +++ b/src/projectEuler/question18.hs @@ -0,0 +1,50 @@ +import Debug.Trace (trace) +small :: [[Integer]] +small = [ + [3], + [7,4], + [2,4,6], + [1000,5,9,3] + ] + +triangle :: [[Integer]] +triangle = [ + [75], + [95,64], + [17,47,82], + [18,35,87,10], + [20,04,82,47,65], + [19,01,23,75,03,34], + [88,02,77,73,07,63,67], + [99,65,04,28,06,16,70,92], + [41,41,26,56,83,40,80,70,33], + [41,48,72,33,47,32,37,16,94,29], + [53,71,44,65,25,43,91,52,97,51,14], + [70,11,33,28,77,73,17,78,39,68,17,57], + [91,71,52,38,17,14,91,43,58,50,27,29,48], + [63,66,04,68,89,53,67,30,73,16,69,87,40,31], + [04,62,98,27,23,09,70,98,73,93,38,53,60,04,23] + ] + +maxPath t i j = (t !! i !! j) + + (if i + 1 < length t + then max (maxPath t (i + 1) j) (maxPath t (i + 1) (j + 1)) + else 0) + +-- This max path doesn't consider the entire path, +-- it only considers the two numbers directly below the index +newMaxPath t i j = (t !! i !! j) + + (if i + 1 < length t + then newMaxPath t i' j' + else 0) + where + a = t !! i' !! j + b = t !! i' !! (j+1) + i' = i+1 + j' = trace (show a) $ if a > b then j else j+1 + +main :: IO () +main = print ans + +ans :: Integer +ans = maxPath small 0 0