advent-of-code/2023/11/Main2.hs
2023-12-14 15:35:02 -08:00

29 lines
762 B
Haskell

import Data.List (scanl', tails, transpose)
import Data.Function (on)
import Data.Bool (bool)
expandEmpty :: Int
expandEmpty = 1000000
sumDistances :: (Int, Int) -> [(Int, Int)] -> Int
sumDistances (n, d) = sum . map sumDistance
where
sumDistance (n', d') = n' * n * (d' - d)
genDistances :: [Int] -> [Int]
genDistances = scanl' (flip $ (+) . bool 1 expandEmpty . (== 0)) 0
solveDirection :: [String] -> Int
solveDirection = sum
. (zipWith sumDistances <*> tail . tails)
. (zip <*> genDistances)
. map countHashes
where
countHashes = length . filter (== '#')
solveAll :: [String] -> Int
solveAll = ((+) `on` solveDirection) <*> transpose
main :: IO ()
main = print . solveAll . lines =<< readFile "data.txt"