From 3c3948a4d8c24b8ea38f5eef2e9a7348e37884bc Mon Sep 17 00:00:00 2001 From: eriedaberrie Date: Mon, 11 Dec 2023 22:33:07 -0800 Subject: [PATCH] 2023 day 12: star 1 --- 2023/12/Main1.hs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 2023/12/Main1.hs diff --git a/2023/12/Main1.hs b/2023/12/Main1.hs new file mode 100644 index 0000000..a58d555 --- /dev/null +++ b/2023/12/Main1.hs @@ -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"