X-Git-Url: https://git.njae.me.uk/?p=advent-of-code-20.git;a=blobdiff_plain;f=advent06%2Fsrc%2Fadvent06.hs;fp=advent06%2Fsrc%2Fadvent06.hs;h=9e8050108bacf47f1bae570044f78b23cf68d7a3;hp=0000000000000000000000000000000000000000;hb=c128358103fbce9ad4b7f44418f33c7f9f55f296;hpb=9ced9f211023ac567fc36b9ffd76c678685ff442 diff --git a/advent06/src/advent06.hs b/advent06/src/advent06.hs new file mode 100644 index 0000000..9e80501 --- /dev/null +++ b/advent06/src/advent06.hs @@ -0,0 +1,39 @@ +-- import Debug.Trace + +import Data.Text (Text) +import qualified Data.Text as T +import qualified Data.Text.IO as TIO + +import Data.Attoparsec.Text +-- import Data.Attoparsec.Combinator + +import qualified Data.Set as S + +main :: IO () +main = + do text <- TIO.readFile "data/advent06.txt" + let groups = successfulParse text + -- print groups + print $ part1 groups + print $ part2 groups + +part1 groups = sum $ map (S.size . S.unions) groups +part2 groups = sum $ map (S.size . intersections) groups + +intersections :: Ord a => [S.Set a] -> S.Set a +intersections group = foldl S.intersection (head group) group + +-- -- Parse the input file + +blankLines = skipMany1 endOfLine + +personP = S.fromList <$> many1 letter +groupP = sepBy1 personP endOfLine + +groupsP = sepBy1 groupP blankLines + +-- successfulParse :: Text -> [Passport] +successfulParse input = + case parseOnly groupsP input of + Left _err -> [] -- TIO.putStr $ T.pack $ parseErrorPretty err + Right groups -> groups