2018-11-26 02:32:15 +00:00
|
|
|
module Day01 (main) where
|
|
|
|
|
2018-12-01 19:03:42 +00:00
|
|
|
import Data.IntSet (empty, insert, member)
|
2018-12-01 08:41:50 +00:00
|
|
|
|
2018-12-01 19:03:42 +00:00
|
|
|
parseChanges :: String -> [Int]
|
|
|
|
parseChanges = map (read . dropWhile (== '+')) . lines
|
2018-12-01 08:41:50 +00:00
|
|
|
|
2018-12-01 19:03:42 +00:00
|
|
|
part1 :: [Int] -> Int
|
|
|
|
part1 = sum
|
2018-12-01 08:41:50 +00:00
|
|
|
|
2018-12-01 19:03:42 +00:00
|
|
|
part2 :: [Int] -> Int
|
|
|
|
part2 = dupl empty . scanl1 (+) . cycle
|
|
|
|
where dupl s (f:fs)
|
|
|
|
| member f s = f
|
|
|
|
| otherwise = dupl (insert f s) fs
|
2018-12-01 08:41:50 +00:00
|
|
|
|
2018-11-26 02:32:15 +00:00
|
|
|
main :: IO ()
|
|
|
|
main = do
|
2018-12-01 19:03:42 +00:00
|
|
|
changes <- parseChanges <$> readFile "input/01.txt"
|
|
|
|
print $ part1 changes
|
|
|
|
print $ part2 changes
|