Done day 1
[advent-of-code-22.git] / advent01 / Main.hs
1 -- Writeup at https://work.njae.me.uk/2022/12/01/advent-of-code-2022-day-1/
2
3 import System.Environment
4 import Data.List
5 import Data.List.Split
6
7 main :: IO ()
8 main =
9 do dataFileName <- getDataFileName
10 numStrs <- readFile dataFileName -- "data/advent01.txt"
11 let calories = fmap (fmap (read @Int)) $ splitWhen null $ lines numStrs
12 print $ part1 calories
13 print $ part2 calories
14
15 getDataFileName :: IO String
16 getDataFileName =
17 do args <- getArgs
18 progName <- getProgName
19 let baseDataName = if null args
20 then progName
21 else head args
22 let dataFileName = "data/" ++ baseDataName ++ ".txt"
23 return dataFileName
24
25 part1 :: [[Int]] -> Int
26 part1 = maximum . fmap sum
27
28 part2 :: [[Int]] -> Int
29 part2 = sum . take 3 . reverse . sort . fmap sum
30