From 4a556998fd3b6ad257d9803e32c07615ff911b60 Mon Sep 17 00:00:00 2001 From: Jeremy Kaplan Date: Sun, 3 Dec 2023 21:37:40 -0800 Subject: [PATCH] 2023 Day 4 Part 2 --- 2023/day04.nim | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/2023/day04.nim b/2023/day04.nim index 7742b2c..609677e 100644 --- a/2023/day04.nim +++ b/2023/day04.nim @@ -28,8 +28,11 @@ proc parseCards(text: string): seq[Card] = for line in lines: result.add parseCard(line) +func matches(card: Card): int = + len(card.winning * card.mine) + func score(card: Card): int = - let matches = len(card.winning * card.mine) + let matches = card.matches if matches > 0: 2 ^ (matches - 1) else: @@ -42,4 +45,23 @@ proc part1(): int = for card in cards: result.inc card.score +proc part2(): int = + let text = readFile("input/day04.txt") + let cards = parseCards(text) + + var multiples: CountTable[int] + + for card in cards: + multiples.inc card.id + + let extras = card.matches + let scale = multiples[card.id] + + for id in (card.id + 1) .. (card.id + extras): + multiples.inc(id, scale) + + for (id, count) in multiples.pairs: + result += count + echo part1() +echo part2()