summaryrefslogtreecommitdiff
path: root/2023/day02/Test.hs
diff options
context:
space:
mode:
authorOrangerot <purple@orangerot.dev>2024-05-17 15:41:55 +0200
committerOrangerot <purple@orangerot.dev>2024-05-17 15:41:55 +0200
commitc6075f736e67e47b940abb9c1a0c54753d4b55b8 (patch)
tree69d827646e615e00f91ef54361cc1701e4f0eff7 /2023/day02/Test.hs
parenta1895fe157e06ee4d119576163ea76390b3d402c (diff)
AoC 2023HEADmain
Diffstat (limited to '2023/day02/Test.hs')
-rw-r--r--2023/day02/Test.hs43
1 files changed, 43 insertions, 0 deletions
diff --git a/2023/day02/Test.hs b/2023/day02/Test.hs
new file mode 100644
index 0000000..6d21d48
--- /dev/null
+++ b/2023/day02/Test.hs
@@ -0,0 +1,43 @@
+import Data.Char (isDigit, isSpace)
+
+data Color = Red | Green | Blue deriving (Show, Eq)
+
+-- Parse a single digit
+digit :: Char -> Maybe Int
+digit c
+ | isDigit c = Just (read [c])
+ | otherwise = Nothing
+
+-- Parse an integer
+-- Parse an integer
+parseInt :: String -> Maybe Int
+parseInt str = case reads str of
+ [(num, "")] -> Just num
+ _ -> Nothing
+
+-- Parse color
+parseColor :: String -> Maybe Color
+parseColor "red" = Just Red
+parseColor "green" = Just Green
+parseColor "blue" = Just Blue
+parseColor _ = Nothing
+
+-- Parse the entire input string
+parseInput :: String -> Maybe Bool
+parseInput input = do
+ let (numStr, rest) = span (\c -> isDigit c ) input
+ num <- parseInt numStr
+ let colorStr = dropWhile isSpace rest
+ color <- parseColor colorStr
+ case color of
+ Red -> pure (num < 12)
+ Green -> pure (num < 13)
+ Blue -> pure (num < 14)
+
+main :: IO ()
+main = do
+ putStrLn "Enter input (e.g., '10 red'):"
+ input <- getLine
+ case parseInput input of
+ Just result -> putStrLn $ "Result: " ++ show result
+ Nothing -> putStrLn "Invalid input."