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

42 lines
989 B
Haskell
Raw Normal View History

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