module Part2 where import Commons getNWinningNumbers :: [Int] -> [Int] -> Int getNWinningNumbers _ [] = 0 getNWinningNumbers winningNumbers (n: t) | n `elem` winningNumbers = 1 + getNWinningNumbers winningNumbers t | otherwise = getNWinningNumbers winningNumbers t updateNCopies :: Int -> Card -> [Card] -> [Card] updateNCopies 0 card otherCards = otherCards updateNCopies n card (c: t) = c {nCopies = nCopies card + nCopies c}: updateNCopies (n - 1) card t updateCopies :: Card -> [Card] -> [Card] updateCopies card otherCards = let nWinningNumbers = getNWinningNumbers (winningNumbers card) (numbers card) in updateNCopies nWinningNumbers card otherCards updateAllCopies :: [Card] -> [Card] updateAllCopies [] = [] updateAllCopies (c: t) = c: updateAllCopies (updateCopies c t) getNCopies :: [Card] -> [Int] getNCopies cards = map nCopies (updateAllCopies cards)