aboutsummaryrefslogtreecommitdiff
path: root/haskell/wip/081-path_sum_two_ways.hs
blob: ec513c4172e0b861f7156c5a118206dd290ed063 (plain)
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
-- Path sum: two ways
--
-- Problem 81
-- In the 5 by 5 matrix below, the minimal path sum from the top left to the bottom right,
-- by only moving to the right and down, is indicated in bold red and is equal to 2427.
--
-- 131 673 234 103 18
-- 201 96  342 965 150
-- 630 803 746 422 111
-- 537 699 497 121 956
-- 805 732 524 37  331
--
-- Find the minimal path sum, in matrix.txt (right click and "Save Link/Target As..."),
-- a 31K text file containing a 80 by 80 matrix, from the top left to the
-- bottom right by only moving right and down.

main = do
    content <- readFile "../data/081_matrix.txt"
    -- print (content)
    let rhombus = parseMatrix content
    print (rhombus)


rectToRhombus :: [[Int]] -> [[Int]]


parseMatrix :: String -> [[Int]]
parseMatrix str = map (map (\x -> read x :: Int)) strList
    where strList = map (split ',') (lines str)

-- https://gist.github.com/yamanobori-old/0f74739f2a97d31ebe05
split :: Eq a => a -> [a] -> [[a]]
split _ [] = [[]]
split delim str =
    let (before, remainder) = span (/= delim) str
    in  before : case remainder of [] -> []
                                   x  -> split delim $ tail x