# Valid Tic-Tac-Toe State

#1

A Tic-Tac-Toe board is given as a string array `board`. Return True if and only if it is possible to reach this board position during the course of a valid tic-tac-toe game.

The `board` is a 3 x 3 array, and consists of characters `" "`, `"X"`, and `"O"`.  The " " character represents an empty square.

Here are the rules of Tic-Tac-Toe:

• Players take turns placing characters into empty squares (" ").
• The first player always places "X" characters, while the second player always places "O" characters.
• "X" and "O" characters are always placed into empty squares, never filled ones.
• The game ends when there are 3 of the same (non-empty) character filling any row, column, or diagonal.
• The game also ends if all squares are non-empty.
• No more moves can be played if the game is over.
```Example 1:
Input: board = ["O  ", "   ", "   "]
Output: false
Explanation: The first player always plays "X".

Example 2:
Input: board = ["XOX", " X ", "   "]
Output: false
Explanation: Players take turns making moves.

Example 3:
Input: board = ["XXX", "   ", "OOO"]
Output: false

Example 4:
Input: board = ["XOX", "O O", "XOX"]
Output: true
```

Note:

• `board` is a length-3 array of strings, where each string `board[i]` has length 3.
• Each `board[i][j]` is a character in the set `{" ", "X", "O"}`.

#2

The code below checks for the following,

1. If both `X` and 'O` win, we return false.
2. If `X` wins and `O` still plays after that, return false.
3. If `O` wins and `X-O` count not equal to 1, return false
``````func validTicTacToe(board []string) bool {
xCount, oCount := 0, 0
xs, cs := 0, 0
for i:=0;i<len(board);i++{
if board[i]=="XXX" {
xs++
}else if board[i]=="OOO"{
cs++
}
yax := string([]byte{board[0][i],board[1][i],board[2][i]})
if yax=="XXX" {
xs++
} else if yax=="OOO" {
cs++
}
for _, ch := range board[i]{
if ch=='X'{
xCount++
} else if ch=='O'{
oCount++
}
}
}
if oCount>xCount || xCount-oCount>1{ return false }

dg1 := string([]byte{board[0][0],board[1][1],board[2][2]})
dg2 := string([]byte{board[0][2],board[1][1],board[2][0]})
if dg1=="XXX" || dg2=="XXX" {
xs++
} else if dg1 == "OOO" || dg2=="OOO" {
cs++
}

if ((cs>0 && xs>0) || (xs>0 && xCount!=oCount+1) || (cs>0 && xCount!=oCount)){ return false }

return true
}

``````