17 lines
646 B
Haskell
17 lines
646 B
Haskell
import Data.List.Split
|
|
|
|
getInitialLine :: [Integer] -> [Integer]
|
|
getInitialLine firstLine = tail $ scanl (+) 0 firstLine
|
|
|
|
getNextLine :: [Integer] -> [Integer] -> [Integer]
|
|
getNextLine prevLine currLine =
|
|
tail $ scanl minSum (head prevLine) (zip prevLine currLine)
|
|
where minSum currSum (up, left) = min (left + up) (left + currSum)
|
|
|
|
main :: IO ()
|
|
main = do
|
|
contents <- readFile "p081_matrix.txt"
|
|
let fileLines = lines contents
|
|
let matrix = map (map read . (splitOn ",")) fileLines :: [[Integer]]
|
|
let initialLine = getInitialLine $ head matrix
|
|
print $ last $ foldl getNextLine initialLine $ tail matrix |