X-Git-Url: https://git.njae.me.uk/?p=advent-of-code-20.git;a=blobdiff_plain;f=advent19%2Fsrc%2Fadvent19mega.hs;fp=advent19%2Fsrc%2Fadvent19mega.hs;h=2ff5e3c04a0825cf386a66992e6beba8b87202ad;hp=073d6cfb1ecaafc357920fa4d96c32b297b74389;hb=ffd4e09b86e7edb1694e9a88feaa67b4abef4890;hpb=cc6239892b5dea639d6787a53bffef90a5cf2841 diff --git a/advent19/src/advent19mega.hs b/advent19/src/advent19mega.hs index 073d6cf..2ff5e3c 100644 --- a/advent19/src/advent19mega.hs +++ b/advent19/src/advent19mega.hs @@ -29,15 +29,14 @@ type RuleSet = M.IntMap Rule main :: IO () main = - do text <- TIO.readFile "data/advent19b.txt" - -- print text + do text <- TIO.readFile "data/advent19.txt" let (rules, messages) = successfulParse text let messagesT = map T.pack messages - -- print rules - -- print messages + -- TIO.writeFile "rules19.mega.txt" $ T.pack $ show rules + print $ length rules + print $ length messages print $ part1 rules messagesT print $ part2 rules messagesT - -- print $ part2 text setup fname = do text <- TIO.readFile fname @@ -49,7 +48,6 @@ setup fname = return (myParser, updatedRules, messagesT) - part1 = countMatches part2 rules messages = countMatches updatedRules messages @@ -60,18 +58,17 @@ countMatches rules messages = length $ filter isRight $ map (parse myParser "message") messages - where myParser = (makeParser rules (See 0)) -- <* eof + where myParser = (makeParser rules (See 0)) <* eof prettyResults rs = map p rs where p (Left e) = errorBundlePretty e p (Right r) = "^" ++ show r - -- Generate the rules makeParser :: RuleSet -> Rule -> Parser () makeParser m (Letter c) = void $ char c -makeParser m (Then rs) = mapM_ (makeParser m) rs +makeParser m (Then rs) = mapM_ (\r -> try (makeParser m r)) rs makeParser m (Or a b) = (try (makeParser m a)) <|> (makeParser m b) makeParser m (See i) = makeParser m (m!i)