diff --git a/2023/12/Main1.hs b/2023/12/Main1.hs new file mode 100644 index 0000000..5de78a7 --- /dev/null +++ b/2023/12/Main1.hs @@ -0,0 +1,22 @@ +import Control.Applicative (liftA2) +import Data.List (group) +import Data.List.Split (splitOn) + +getConsecutives :: String -> [Int] +getConsecutives = map length . filter ((== '#') . head) . group + +allSprings :: String -> [String] +allSprings = foldr (liftA2 (:) . getChars) [""] + where + getChars c = if c == '?' then ['.', '#'] else [c] + +solve :: [Int] -> String -> Int +solve records = length . filter ((== records) . getConsecutives) . allSprings + +parseLine :: String -> ([Int], String) +parseLine l = (map read . splitOn "," $ y, x) + where + (x:y:_) = splitOn " " l + +main :: IO () +main = print . sum . map (uncurry solve . parseLine) . lines =<< readFile "data.txt"