1 {-# LANGUAGE NegativeLiterals #-}
3 module Main(main) where
5 import Data.List (tails)
9 digits <- readFile "data/advent01.txt"
13 part1 :: String -> Integer
14 part1 = sum_valid_pairs . part1_extract
16 part2 :: String -> Integer
17 part2 = sum_valid_pairs . part2_extract
19 part1_extract :: String -> [String]
20 part1_extract digits = map (take 2) $ tails (digits ++ [head digits])
22 part2_extract :: String -> [String]
23 part2_extract digits = map (\ds -> (take 1 ds) ++ (take 1 $ drop offset ds))
24 $ take (length digits)
25 $ tails (digits ++ digits)
26 where offset = length digits `div` 2
28 sum_valid_pairs :: [String] -> Integer
29 sum_valid_pairs possibles = sum $ map (read . take 1)
30 $ filter (\(x:y:_) -> x == y)
31 $ filter (\p -> length p == 2) possibles