From 2d31ebe29e936f894ce3ce1f92999aec80c20389 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Mon, 25 Dec 2023 23:47:01 +0100 Subject: parsing updates for 2022-22 in haskell --- 2022/22-Monkey-Map/first.hs | 11 ++++------- 2022/22-Monkey-Map/second.hs | 11 ++++------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/2022/22-Monkey-Map/first.hs b/2022/22-Monkey-Map/first.hs index a7f9385..913ba30 100644 --- a/2022/22-Monkey-Map/first.hs +++ b/2022/22-Monkey-Map/first.hs @@ -20,12 +20,12 @@ type Parser = Parsec Void String parseMapLine :: Parser Line parseMapLine = do - line <- some (char '.' <|> char ' ' <|> char '#') <* char '\n' + line <- some (char '.' <|> char ' ' <|> char '#') <* eol return $ V.generate (length line) (line !!) parseMap :: Parser Map parseMap = do - lines <- some parseMapLine <* char '\n' + lines <- some parseMapLine <* eol return $ V.generate (length lines) (lines !!) parseInstruction :: Parser Instruction @@ -34,11 +34,8 @@ parseInstruction = (Move . read <$> some digitChar) <|> (char 'R' $> R) parseInput' :: Parser Input -parseInput' = do - m <- parseMap - i <- some parseInstruction - void $ optional (char '\n') <* eof - return $ Input m i +parseInput' = Input <$> parseMap + <*> some parseInstruction <* eol <* eof parseInput :: String -> IO Input parseInput filename = do diff --git a/2022/22-Monkey-Map/second.hs b/2022/22-Monkey-Map/second.hs index 82752cd..33385dc 100644 --- a/2022/22-Monkey-Map/second.hs +++ b/2022/22-Monkey-Map/second.hs @@ -21,12 +21,12 @@ type Parser = Parsec Void String parseMapLine :: Parser Line parseMapLine = do - line <- some (char '.' <|> char ' ' <|> char '#') <* char '\n' + line <- some (char '.' <|> char ' ' <|> char '#') <* eol return $ V.generate (length line) (line !!) parseMap :: Parser Map parseMap = do - lines <- some parseMapLine <* char '\n' + lines <- some parseMapLine <* eol return $ V.generate (length lines) (lines !!) parseInstruction :: Parser Instruction @@ -35,11 +35,8 @@ parseInstruction = (Move . read <$> some digitChar) <|> (char 'R' $> R) parseInput' :: Parser Input -parseInput' = do - m <- parseMap - i <- some parseInstruction - void $ optional (char '\n') <* eof - return $ Input m i +parseInput' = Input <$> parseMap + <*> some parseInstruction <* eol <* eof parseInput :: String -> IO Input parseInput filename = do -- cgit v1.2.3