-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathP18.hs
32 lines (28 loc) · 1.01 KB
/
P18.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
triangle :: [[Int]]
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]]
calcRow :: [Int] -> [Int] -> [Int]
calcRow maxes = calcRow' (Nothing : map Just maxes)
where
calcRow' (Nothing:Just m:ms) (r:rs) = (m+r) : calcRow' (Just m:ms) rs
calcRow' (Just m1:Just m2:ms) (r:rs) = max (m1+r) (m2+r) : calcRow' (Just m2:ms) rs
calcRow' [Just m] [r] = [m+r]
totals :: [Int]
totals = foldl1 calcRow triangle
answer :: Int
answer = maximum totals
main :: IO ()
main = putStrLn . show $ answer