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
|