2023 day 12: star 1

This commit is contained in:
eriedaberrie 2023-12-11 22:33:07 -08:00
parent e3a9d35260
commit 3c3948a4d8

22
2023/12/Main1.hs Normal file
View file

@ -0,0 +1,22 @@
import Data.List.Split (splitOn)
import Data.List (group)
matchesConsecutive :: [Int] -> String -> Bool
matchesConsecutive xs = (==) xs . map length . filter ((==) '#' . head) . group
allSprings :: String -> [String]
allSprings "" = [""]
allSprings (x:xs) = allSprings xs >>= (\s -> map (:s) possibleChars)
where
possibleChars = if x == '?' then ['.', '#'] else [x]
solve :: (String, [Int]) -> Int
solve (springs, records) = length . filter (matchesConsecutive records) . allSprings $ springs
parseLine :: String -> (String, [Int])
parseLine l = (x, map read . splitOn "," $ y)
where
(x:y:_) = splitOn " " l
main :: IO ()
main = print . sum . map (solve . parseLine) . filter (not . null) . lines =<< readFile "data.txt"