From 261bfbaa66c0293585c0d8f7ccb6fe4423bcad4e Mon Sep 17 00:00:00 2001 From: tzlil Date: Sat, 2 Dec 2023 19:25:43 +0200 Subject: lol --- 2/1.hs | 10 +++++----- 2/2.hs | 14 ++++++++------ 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/2/1.hs b/2/1.hs index 4f3a5ae..1073b72 100644 --- a/2/1.hs +++ b/2/1.hs @@ -12,18 +12,18 @@ type Handful = (Color, Int) type Set = M.Map Color Int type Game = (Int, [Set]) -red = try $ string "red" *> pure Red -green = try $ string "green" *> pure Green -blue = try $ string "blue" *> pure Blue +red = string "red" *> pure Red +green = string "green" *> pure Green +blue = string "blue" *> pure Blue color :: Parser Color color = red <|> green <|> blue handful :: Parser Handful -handful = space *> (flip (,) <$> read <$> many1 digit) <* space <*> color +handful = liftM2 (flip (,)) (space *> (read <$> many1 digit)) (space *> color) set = M.fromList <$> (sepBy handful $ string ",") -game = string "Game " *> ((,) <$> read <$> many1 digit) <* string ":" <*> sepBy set (string ";") +game = liftM2 (,) (string "Game " *> (read <$> many1 digit)) (string ":" *> sepBy set (string ";")) games = sepBy game newline diff --git a/2/2.hs b/2/2.hs index 4437594..3d26a35 100644 --- a/2/2.hs +++ b/2/2.hs @@ -12,22 +12,24 @@ type Handful = (Color, Int) type Set = M.Map Color Int type Game = (Int, [Set]) -red = try $ string "red" *> pure Red -green = try $ string "green" *> pure Green -blue = try $ string "blue" *> pure Blue +red = string "red" *> pure Red +green = string "green" *> pure Green +blue = string "blue" *> pure Blue color :: Parser Color color = red <|> green <|> blue handful :: Parser Handful -handful = space *> (flip (,) <$> read <$> many1 digit) <* space <*> color +handful = liftM2 (flip (,)) (space *> (read <$> many1 digit)) (space *> color) set = M.fromList <$> (sepBy handful $ string ",") -game = string "Game " *> ((,) <$> read <$> many1 digit) <* string ":" <*> sepBy set (string ";") +game = liftM2 (,) (string "Game " *> (read <$> many1 digit)) (string ":" *> sepBy set (string ";")) games = sepBy game newline solution :: Game -> Int solution = product . M.elems . M.unionsWith max . snd -main = head <$> getArgs >>= ((=<<) . ((print . sum . map solution . either (error . show) id) .) . parse games) <*> readFile \ No newline at end of file +main = head <$> getArgs >>= \a -> do + r <- readFile a + print $ sum $ map solution $ either (error.show) id $ parse games a r \ No newline at end of file -- cgit 1.4.1