advent-of-code/common/AoC.hs

30 lines
802 B
Haskell
Raw Normal View History

module AoC
( (.:)
, oneCompleteResult
, splitOnEmptyLines
, runAoC
)
where
2020-12-05 09:53:27 +01:00
import Data.Function (on)
2020-12-10 16:32:25 +01:00
import Data.List (groupBy)
import Text.ParserCombinators.ReadP
2020-12-05 09:53:27 +01:00
(.:) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
f .: g = (f .) . g
infixl 8 .:
oneCompleteResult :: ReadP a -> String -> Maybe a
oneCompleteResult p s = case readP_to_S (p <* eof) s of
[(x, "")] -> Just x
_ -> Nothing
splitOnEmptyLines :: String -> [[String]]
splitOnEmptyLines = filter (not . any null) . groupBy ((==) `on` null) . lines
2020-12-05 09:53:27 +01:00
runAoC :: (Show r1, Show r2) => (String -> i) -> (i -> r1) -> (i -> r2) -> IO ()
runAoC inputTransform part1 part2 = do
contents <- inputTransform <$> getContents
print $ part1 contents
print $ part2 contents