Who won the tic-tac-toe game
A completed 3x3 tic-tac-toe board is given. Determine which player won, or if it is a draw.
- The board is a 3x3 grid of integers: 0 means empty, 1 is player one, 2 is player two.
- A player wins by filling an entire row, column, or diagonal with their value.
- Return the winning player's number, or 0 if nobody won.
ticTacToeWinner(board: list<list<int>>) → int
Go needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.
Where you start
func ticTacToeWinner(board [][]int) int {
}
Worked examples
| Call | Result |
|---|---|
ticTacToeWinner([][]int{[]int{1, 1, 1}, []int{0, 2, 0}, []int{2, 0, 2}}) | 1 |
ticTacToeWinner([][]int{[]int{2, 0, 1}, []int{2, 0, 1}, []int{2, 1, 0}}) | 2 |
ticTacToeWinner([][]int{[]int{1, 2, 1}, []int{0, 1, 2}, []int{2, 0, 1}}) | 1 |
ticTacToeWinner([][]int{[]int{0, 1, 2}, []int{1, 2, 0}, []int{2, 0, 0}}) | 2 |
Hint
Check all three rows, all three columns, and both diagonals.
Reference solution in Go
func ticTacToeWinner(board [][]int) int {
for i := 0; i < 3; i++ {
if board[i][0] != 0 && board[i][0] == board[i][1] && board[i][1] == board[i][2] {
return board[i][0]
}
if board[0][i] != 0 && board[0][i] == board[1][i] && board[1][i] == board[2][i] {
return board[0][i]
}
}
if board[0][0] != 0 && board[0][0] == board[1][1] && board[1][1] == board[2][2] {
return board[0][0]
}
if board[0][2] != 0 && board[0][2] == board[1][1] && board[1][1] == board[2][0] {
return board[0][2]
}
return 0
}