-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathp018.hs
38 lines (32 loc) · 1.04 KB
/
p018.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
33
34
35
36
37
38
import Data.List
--triangle = [[3],[7,4],[2,4,6],[8,5,9,3]]
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]
]
tuplePair :: [a] -> [(a,a)]
tuplePair (x:[]) = [(x,x)]
tuplePair (x:y:xs) = (x,y) : tuplePair (y:xs)
pickOption :: Int -> (Int, Int) -> Int
pickOption x options = maximum [first, second]
where first = x + (fst options)
second = x + (snd options)
process :: [[Int]] -> [Int]
process (x:[]) = x
process (x:y:xs) = process (calcRow : xs)
where expandedRow = tuplePair $ (head x) : x
calcRow = zipWith pickOption y expandedRow
main = print $ maximum $ process triangle