51 lines
1.1 KiB
Haskell
51 lines
1.1 KiB
Haskell
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
|