Done task 2
[summerofcode2018soln.git] / src / task2 / task2.hs
1 import Data.List (foldl')
2
3 main :: IO ()
4 main = do
5 record_text <- readFile "data/02-rainfall.txt"
6 let records = readRecords record_text
7 print $ part1 records
8 print $ part2 records
9 print $ part2a records
10
11 readRecords :: String -> [Int]
12 readRecords = takeWhile (< 9999) . map read . lines
13
14 part1 :: [Int] -> Int
15 part1 = length
16
17 part2 :: [Int] -> Int
18 part2 records = round $ ((fromIntegral $ sum records) :: Double)
19 / (fromIntegral $ length records)
20
21
22 -- Doing part 2 as a fold, so only traverse the list once
23 part2a :: [Int] -> Int
24 part2a records = round $ ((fromIntegral sumR) :: Double) / (fromIntegral count)
25 where
26 (sumR, count) = foldl' (\(s, n) r -> (s+r, n+1)) (0, 0) records