import random
def tic_tac_toe(request):
request_json = request.get_json()
try:
board = request_json['board']
except:
return 'Did not include board!!!'
if not isinstance(board, list):
return "Invalid board. Must be a list"
if len(board) != 3:
return "Invalid board. Outer array is not of length 3"
move = None
for i, row in enumerate(board):
if not isinstance(row, list):
return f"Invalid board. Row {i} is not a list"
if len(row) != 3:
return f"Invalid board. Row {i} is not length 3"
for j, elem in enumerate(row):
if elem == '':
if not move or random.randrange(100) < 50:
move = [i,j]
if elem not in ['X','O','']:
return f'Invalid board. Elem [{i}][{j}] not valid.'
if not move:
return "Invalid board. Cat's game board"
for i in range(len(board)):
if board[i].count('X') == len(board):
return 'You already won!'
if board[i].count('O') == len(board):
return 'I already won!'
if len( {board[0][i], board[1][i], board[2][i]} ) == 1:
if board[0][i] == 'X':
return 'You already won!'
if board[0][i] == 'O':
return 'I already won!'
# Check diagonals
if 1 in [
len( {board[0][0], board[1][1], board[2][2]} ),
len( {board[2][0], board[1][1], board[0][2]} )]:
if board[1][1] == 'X':
return 'You already won!'
if board[1][1] == 'O':
return 'I already won!'
board[move[0]][move[1]] = 'O'
return f'{board}'