# Issue

*This Content is from Stack Overflow. Question asked by Joji *

I am writing a function that takes a 2d array that represents a grid for a tic tac toe game. Initially it is `[[0, 0, 0], [0, 0, 0], [0, 0, 0]]`

and there is player 1 which is represented as `1`

and player 2 as `-1`

.

The function to check the winner should return the winner if there is actually a winner.

My attempt is this:

```
const checkIfWin = (b) => {
if (b[0][0] == b[0][1] && b[0][1] == b[0][2]) return b[0][0]
if (b[1][0] == b[1][1] && b[1][2] == b[1][1]) return b[1][0]
if (b[2][0] == b[2][1] && b[2][1] == b[2][2]) return b[2][2]
if (b[0][0] == b[1][0] && b[1][0] == b[2][0]) return b[2][0]
if (b[0][1] == b[1][1] && b[1][1] == b[2][1]) return b[2][1]
if (b[0][2] == b[1][2] && b[1][2] == b[2][2]) return b[2][2]
if (b[0][0] == b[1][1] && b[1][1] == b[2][2]) return b[2][2]
if (b[0][2] == b[1][1] && b[1][1] == b[2][0]) return b[2][0]
}
checkIfWin([ [ 1, 0, 0 ], [ 0, 1, 0 ], [ -1, -1, 1 ] ]) // 1
```

It works but I don’t think it is really elegant or clean and I wonder if there is a better way to check a winner and return the winner?

# Solution

- Use two helper functions:
`checkRow(i)`

and`checkColumn(i)`

, which check if all values are same in a given row and column respectively. - For
`i`

in range`[0, number of rows]`

, use`checkRow(i)`

- For
`i`

in range`[0, number of columns]`

, use`checkColumn(i)`

- If still no winner is found, check the diagonals (for which you can use another helper function)

This is extremely simple to program, so I’ll leave that up to you. But you can use this approach to break down the problem into simpler pieces.

This Question was asked in StackOverflow by Joji and Answered by Abhinav Mathur It is licensed under the terms of CC BY-SA 2.5. - CC BY-SA 3.0. - CC BY-SA 4.0.