summaryrefslogtreecommitdiff
path: root/2023/day02/MySplit.hs
diff options
context:
space:
mode:
Diffstat (limited to '2023/day02/MySplit.hs')
-rw-r--r--2023/day02/MySplit.hs41
1 files changed, 41 insertions, 0 deletions
diff --git a/2023/day02/MySplit.hs b/2023/day02/MySplit.hs
new file mode 100644
index 0000000..2bb5f3f
--- /dev/null
+++ b/2023/day02/MySplit.hs
@@ -0,0 +1,41 @@
+import Data.List.Split (splitOn)
+
+game :: String -> [String]
+game = splitOn [';']
+
+reveal :: String -> [String]
+reveal x = concat ( map (splitOn [',']) (game x) )
+
+colors :: String -> [(Int, String)]
+colors x = map (\x -> color (splitOn [' '] x)) (reveal x)
+
+color :: [String] -> (Int, String)
+color [_, i, s] = (read i, s)
+
+validColor :: (Int, String) -> Bool
+validColor (i, s) = case s of
+ "red" -> i <= 12
+ "green" -> i <= 13
+ "blue" -> i <= 14
+ _ -> False
+
+getColors :: String -> String
+getColors s = tail (dropWhile (/= ':') s)
+
+isGameValid :: String -> Bool
+isGameValid s = all validColor (colors (getColors s))
+
+isValid :: [String] -> Bool
+isValid s = all isGameValid s
+
+main :: IO ()
+main = do
+ inputLines <- lines <$> getContents
+
+ -- let arePossible = filter isPossible lines
+ -- myColors <- isValid inputLines
+ print (sum (map (\(_,n) -> n) (filter (\(b,_) -> b) (zip (map isGameValid inputLines) [1..]))))
+
+ -- mapM_ putStrLn myColors
+ -- mapM_ putStrLn inputLines
+