import Parsing (splitByString) main :: IO () main = do input <- getContents let fish = parseFish input (putStrLn . show . solution1) fish solution1 :: [Int] -> Int solution1 = length . (simulateDays 80) parseFish :: String -> [Int] parseFish = (map read) . (splitByString ",") simulateDays :: Int -> [Int] -> [Int] simulateDays days fish = foldr (\f acc -> f acc) fish (replicate days tickDay) tickDay :: [Int] -> [Int] tickDay [] = [] tickDay (fish:otherFish) | fish == 0 = 6:8:(tickDay otherFish) | otherwise = (fish - 1):(tickDay otherFish) -- Tests testInput = "3,4,3,1,2" testParsed = parseFish testInput test1 = solution1 (parseFish testInput) testTick = (tickDay . tickDay) testParsed testSimulate = length (simulateDays 80 testParsed)