22 lines
720 B
Haskell
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 |