1 module Main(main) where
4 import Text.ParserCombinators.Parsec.Number
9 text <- readFile "data/advent02.txt"
10 let sheet = successfulParse $ parseFile text
15 part1 :: [[Int]] -> Int
16 part1 = sum . map p1cSum
18 part2 :: [[Int]] -> Int
19 part2 = sum . map p2cSum
22 p1cSum :: [Int] -> Int
23 p1cSum row = (maximum row) - (minimum row)
25 p2cSum :: [Int] -> Int
26 p2cSum digits = sum [a `div` b | a <- digits, b <- digits, a /= b, a `mod` b == 0]
30 sFile = sLine `sepEndBy` newline
31 sLine = int `sepBy` onlySpaces
33 onlySpaces = many (oneOf " \t")
35 parseFile :: String -> Either ParseError [[Int]]
36 parseFile input = parse sFile "(unknown)" input
38 parseLine :: String -> Either ParseError [Int]
39 parseLine input = parse sLine "(unknown)" input
41 successfulParse :: Either ParseError [a] -> [a]
42 successfulParse (Left _) = []
43 successfulParse (Right a) = a