projects
/
advent-of-code-20.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
A bit of tidying, a bit of investigation
[advent-of-code-20.git]
/
advent19
/
src
/
advent19mega.hs
diff --git
a/advent19/src/advent19mega.hs
b/advent19/src/advent19mega.hs
index 073d6cfb1ecaafc357920fa4d96c32b297b74389..2ff5e3c04a0825cf386a66992e6beba8b87202ad 100644
(file)
--- a/
advent19/src/advent19mega.hs
+++ b/
advent19/src/advent19mega.hs
@@
-29,15
+29,14
@@
type RuleSet = M.IntMap Rule
main :: IO ()
main =
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
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 $ part1 rules messagesT
print $ part2 rules messagesT
- -- print $ part2 text
setup fname =
do text <- TIO.readFile fname
setup fname =
do text <- TIO.readFile fname
@@
-49,7
+48,6
@@
setup fname =
return (myParser, updatedRules, messagesT)
return (myParser, updatedRules, messagesT)
-
part1 = countMatches
part2 rules messages = countMatches updatedRules messages
part1 = countMatches
part2 rules messages = countMatches updatedRules messages
@@
-60,18
+58,17
@@
countMatches rules messages
= length
$ filter isRight
$ map (parse myParser "message") 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
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
-- 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)
makeParser m (Or a b) = (try (makeParser m a)) <|> (makeParser m b)
makeParser m (See i) = makeParser m (m!i)