From d7e41f1e93eac045329b6ea91ae150d517e443a3 Mon Sep 17 00:00:00 2001 From: tzlil Date: Sat, 2 Dec 2023 14:09:07 +0200 Subject: a little nicer --- 2/1.hs | 6 ++++-- 2/2.hs | 4 +++- 2/input.txt | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/2/1.hs b/2/1.hs index 9151408..4f3a5ae 100644 --- a/2/1.hs +++ b/2/1.hs @@ -7,7 +7,7 @@ import Data.Maybe import qualified Data.Map as M import Control.Monad -data Color = Red | Green | Blue deriving (Eq,Ord) +data Color = Red | Green | Blue deriving (Show,Eq,Ord) type Handful = (Color, Int) type Set = M.Map Color Int type Game = (Int, [Set]) @@ -25,6 +25,8 @@ handful = space *> (flip (,) <$> read <$> many1 digit) <* space <*> color set = M.fromList <$> (sepBy handful $ string ",") game = string "Game " *> ((,) <$> read <$> many1 digit) <* string ":" <*> sepBy set (string ";") +games = sepBy game newline + solution :: Game -> Maybe Int solution (i,m) = do let m' = M.unionsWith max m @@ -33,4 +35,4 @@ solution (i,m) = do guard $ M.findWithDefault 0 Blue m' <= 14 return i -main = head <$> getArgs >>= readFile >>= print . sum . catMaybes . map solution . catMaybes . map (either (const Nothing) Just . parse game "") <$> lines \ No newline at end of file +main = head <$> getArgs >>= readFile >>= print . sum . catMaybes . map solution . either (error.show) id . parse games "" \ No newline at end of file diff --git a/2/2.hs b/2/2.hs index 0d1f855..ed96a26 100644 --- a/2/2.hs +++ b/2/2.hs @@ -25,7 +25,9 @@ handful = space *> (flip (,) <$> read <$> many1 digit) <* space <*> color set = M.fromList <$> (sepBy handful $ string ",") game = 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 >>= readFile >>= print . sum . map solution . catMaybes . map (either (const Nothing) Just . parse game "") <$> lines \ No newline at end of file +main = head <$> getArgs >>= readFile >>= print . sum . map solution . either (error.show) id . parse games "" \ No newline at end of file diff --git a/2/input.txt b/2/input.txt index 02772c8..ed9eee4 100644 --- a/2/input.txt +++ b/2/input.txt @@ -97,4 +97,4 @@ Game 96: 4 red, 4 green, 3 blue; 4 green, 17 blue, 3 red; 3 red, 3 blue, 13 gree Game 97: 5 blue, 9 green; 4 green, 4 blue; 4 red, 19 green; 2 red, 3 green; 19 green, 3 blue, 4 red; 3 red, 10 green Game 98: 4 blue, 10 red, 8 green; 2 red, 3 green; 5 red, 4 blue, 10 green Game 99: 9 blue, 12 red; 9 blue, 11 red, 13 green; 9 blue, 1 red, 13 green; 4 blue, 12 green; 10 blue, 17 red, 8 green -Game 100: 8 red, 3 green; 4 green, 1 blue, 15 red; 10 red, 8 green, 1 blue +Game 100: 8 red, 3 green; 4 green, 1 blue, 15 red; 10 red, 8 green, 1 blue \ No newline at end of file -- cgit 1.4.1