61 lines
1.1 KiB
Go
61 lines
1.1 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func main() {
|
||
|
var numbers []int
|
||
|
var boards []Board
|
||
|
var boardLines []string
|
||
|
|
||
|
s := bufio.NewScanner(os.Stdin)
|
||
|
for s.Scan() {
|
||
|
// first line should be the numbers
|
||
|
if numbers == nil {
|
||
|
for _, n := range strings.Split(s.Text(), ",") {
|
||
|
val, _ := strconv.Atoi(n)
|
||
|
numbers = append(numbers, val)
|
||
|
}
|
||
|
s.Scan()
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
if len(s.Bytes()) == 0 {
|
||
|
boards = append(boards, NewBoard(boardLines))
|
||
|
boardLines = []string{}
|
||
|
} else {
|
||
|
boardLines = append(boardLines, s.Text())
|
||
|
}
|
||
|
}
|
||
|
// if we have any lines left, convert them into board
|
||
|
if len(boardLines) > 0 {
|
||
|
boards = append(boards, NewBoard(boardLines))
|
||
|
}
|
||
|
|
||
|
for _, num := range numbers {
|
||
|
if len(boards) == 1 {
|
||
|
board := boards[0]
|
||
|
board.Mark(num)
|
||
|
fmt.Println(board.Sum() * num)
|
||
|
os.Exit(0)
|
||
|
}
|
||
|
|
||
|
// crude filter for not winning boards
|
||
|
var newBoards []Board
|
||
|
for _, board := range boards {
|
||
|
board.Mark(num)
|
||
|
if !board.CheckWin() {
|
||
|
newBoards = append(newBoards, board)
|
||
|
}
|
||
|
}
|
||
|
boards = newBoards
|
||
|
}
|
||
|
|
||
|
fmt.Println(":(")
|
||
|
}
|