advent-of-code/2021/day-04/part_two.go

50 lines
990 B
Go

package main
import (
"os"
"fmt"
. "aoc/aoc"
)
func find_winner(numbers []int, boards []Board) (*Board, int) {
var boards_left = len(boards)
for _, number := range numbers {
for b, _ := range boards {
if boards[b].Completed { continue }
if MarkBoard(&boards[b], number) {
if boards_left == 1 {
return &boards[b], number
}
boards[b].Completed = true
boards_left -= 1;
}
}
}
return nil, -1
}
func main() {
path := os.Args[1]
numbers, boards, err := ReadFile(path)
if err != nil {
os.Exit(1)
}
board, last_number := find_winner(numbers, boards)
var unmarked_sum = 0
for _, row := range board.Fields {
for _, col := range row {
if !col.Marked {
unmarked_sum += col.Value;
}
}
}
fmt.Println(unmarked_sum * last_number)
}