diff options
Diffstat (limited to 'execs/Day14.hs')
-rw-r--r-- | execs/Day14.hs | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/execs/Day14.hs b/execs/Day14.hs index d82424a..7f4368a 100644 --- a/execs/Day14.hs +++ b/execs/Day14.hs | |||
@@ -5,6 +5,7 @@ import Text.ParserCombinators.Parsec | |||
5 | import Text.Parsec.Char | 5 | import Text.Parsec.Char |
6 | import Data.Either | 6 | import Data.Either |
7 | import Data.Char | 7 | import Data.Char |
8 | import Data.Bifunctor (bimap) | ||
8 | import Data.Strings | 9 | import Data.Strings |
9 | import Numeric (showIntAtBase, readInt) | 10 | import Numeric (showIntAtBase, readInt) |
10 | import Data.Map (Map) | 11 | import Data.Map (Map) |
@@ -15,11 +16,11 @@ data Stmt = Mask String | Mem Int Int deriving Show | |||
15 | parseMask :: Parser Stmt | 16 | parseMask :: Parser Stmt |
16 | parseMask = string "mask = " >> Mask <$> many anyChar | 17 | parseMask = string "mask = " >> Mask <$> many anyChar |
17 | 18 | ||
19 | parseNumber :: Parser Int | ||
20 | parseNumber = read <$> many1 digit | ||
21 | |||
18 | parseMem :: Parser Stmt | 22 | parseMem :: Parser Stmt |
19 | parseMem = do | 23 | parseMem = Mem <$ string "mem[" <*> parseNumber <* string "] = " <*> parseNumber |
20 | one <- string "mem[" >> many1 digit | ||
21 | two <- string "] = " >> many1 digit | ||
22 | return $ Mem (read one) (read two) | ||
23 | 24 | ||
24 | parseLine :: Parser Stmt | 25 | parseLine :: Parser Stmt |
25 | parseLine = try parseMask <|> parseMem | 26 | parseLine = try parseMask <|> parseMem |