summary refs log tree commit diff
path: root/2
diff options
context:
space:
mode:
Diffstat (limited to '2')
-rw-r--r--2/1.hs10
-rw-r--r--2/2.hs14
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