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
/
advent19atto.hs
diff --git
a/advent19/src/advent19atto.hs
b/advent19/src/advent19atto.hs
index b322324de0b9d2c3622f27cbd519f56946be10ab..621040652ca7d2fff6ec3e6315efd5265806c990 100644
(file)
--- a/
advent19/src/advent19atto.hs
+++ b/
advent19/src/advent19atto.hs
@@
-17,33
+17,26
@@
import Data.Either
data Rule = Letter Char
data Rule = Letter Char
- -- | Then2 Rule Rule
- -- | Then3 Rule Rule Rule
| Then [Rule]
| Or Rule Rule
| See Int
deriving (Show, Eq)
| Then [Rule]
| Or Rule Rule
| See Int
deriving (Show, Eq)
--- data Tree = TEmpty
--- | TLetter Char
--- | TThen [Tree]
--- deriving (Show, Eq)
-
type RuleSet = M.IntMap Rule
main :: IO ()
main =
type RuleSet = M.IntMap Rule
main :: IO ()
main =
- do text <- TIO.readFile "data/advent19
b
.txt"
+ do text <- TIO.readFile "data/advent19.txt"
-- print text
let (rules, messages) = successfulParse inputP text
let messagesT = map T.pack messages
-- print text
let (rules, messages) = successfulParse inputP text
let messagesT = map T.pack messages
- -- print rules
- -- print messages
+ -- TIO.writeFile "rules19.atto.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
@@
-73,8
+66,8
@@
countMatches rules messages
makeParser :: RuleSet -> Rule -> Parser ()
makeParser m (Letter c) = void $ char c
makeParser :: RuleSet -> Rule -> Parser ()
makeParser m (Letter c) = void $ char c
-makeParser m (Then rs) = mapM_ (
makeParser m
) rs
-makeParser m (Or a b) = (
makeParser m a
) <|> (makeParser m b)
+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 (See i) = makeParser m (m!i)