adventofcode/2021/day06.hs

22 lines
720 B
Haskell

module Day06 where
import Data.Array
import Data.List.Split
updateArray :: Array Int Int -> Array Int Int
updateArray a = array (0,8) $ map (\i -> (i,calculate i)) [0..8] where
calculate 8 = a ! 0
calculate 6 = (a ! 0) + (a ! 7)
calculate x = a ! (x+1)
calcArray :: Int -> Array Int Int -> Array Int Int
calcArray n = foldr (.) id $ replicate n updateArray
main :: IO ()
main = do
input <- map (read :: String -> Int) . splitOn "," <$> getContents
let starting_array = array (0,8) $ map (\val -> (val,length $ filter (==val) input)) [0..8]
putStr "part 1: "
print $ sum $ elems $ calcArray 80 starting_array
putStr "part 2: "
print $ sum $ elems $ calcArray 256 starting_array