AoC/2021/day09/day09.hs
2021-12-18 22:30:36 +01:00

19 lines
775 B
Haskell

import Data.Char
import Data.List.Split
import Data.List
main :: IO ()
main = do
input_raw <- map (map digitToInt) <$> lines <$> readFile "day09/input"
let nines = take (length (head input_raw)) $ repeat 9
let nineIt x = map ((9:) . (++[9])) $ (nines : x ++ [nines])
print $ day09 (nineIt input_raw) input_raw
day09 :: [[Int]] -> [[Int]] -> Int
day09 input input_raw = foldl (\acc (x,y) ->if y then acc+1+x else acc) 0 $ zip (concat input_raw) bools
where vert = tail $ init $ map ((map isSmol) . divvy 3 1) (transpose input)
horz = tail $ init $ map ((map isSmol) . divvy 3 1) input
isSmol [a,b,c] = if b<a && b<c then True else False
isSmol :: [Int] -> Bool
bools = zipWith (&&) (concat (transpose vert)) (concat horz)