From b26f1531f5d20ad6b921971cdf5632329338e490 Mon Sep 17 00:00:00 2001 From: Kharec Date: Sat, 6 Dec 2025 23:43:01 +0100 Subject: [PATCH] feat: solve part two --- internal/2021/DayFour/code.go | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/internal/2021/DayFour/code.go b/internal/2021/DayFour/code.go index 5e9248c..66c77e9 100644 --- a/internal/2021/DayFour/code.go +++ b/internal/2021/DayFour/code.go @@ -113,9 +113,9 @@ func parseNumbers(line string) []int { return numbers } -func PartOne(lines []string) int { - numbers := parseNumbers(lines[0]) - boards := parseBoards(lines[1:]) +func PartOne(data []string) int { + numbers := parseNumbers(data[0]) + boards := parseBoards(data[1:]) for _, number := range numbers { for idx := range boards { @@ -128,6 +128,28 @@ func PartOne(lines []string) int { return 0 } -func PartTwo(lines []string) int { +func PartTwo(data []string) int { + numbers := parseNumbers(data[0]) + boards := parseBoards(data[1:]) + + wonCount := 0 + totalBoards := len(boards) + var lastWinner *board + var lastNumber int + + for _, number := range numbers { + for idx := range boards { + if boards[idx].mark(number) { + wonCount++ + lastWinner = &boards[idx] + lastNumber = number + + if wonCount == totalBoards { + return lastWinner.sumUnmarked() * lastNumber + } + } + } + } + return 0 }