advent-of-code/2023/day04/Main.hs
2024-12-01 05:55:27 +01:00

21 lines
543 B
Haskell

import Data.List.Split (splitOn)
getGame :: String -> String
getGame s = tail $ dropWhile (/= ':') s
splitGame :: String -> [[String]]
splitGame s = map (\x -> filter (/= "") (splitOn [' '] x)) (splitOn ['|'] s)
calcPoints :: [String] -> Int
calcPoints w = round $ 2^^(length w - 1)
main :: IO ()
main = do
inputLines <- lines <$> getContents
let games = map (\x -> splitGame (getGame x)) inputLines
let wins = map (\[w, cards] -> filter (\card -> elem card w) cards) games
let points = map calcPoints wins
print (sum points)