advent-of-code/2023/day02/Test.hs

44 lines
1.1 KiB
Haskell
Raw Permalink Normal View History

2024-05-17 15:41:55 +02:00
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."