Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for Xs and Os Referee by yama_k_1101
def find_winner(game_result, idx):
winner = game_result[idx][0]
if all(e == winner for e in game_result[idx]):
return winner
else:
return '.'
def find_winner_diag(game_result, range_iter):
winner = game_result[1][1]
if all(game_result[r][c] == winner for r, c in range_iter):
return winner
else:
return '.'
def checkio(game_result):
game_result = list(map(list, game_result))
game_result_T = list(zip(*game_result))
result = []
for idx in range(len(game_result)):
result.append(find_winner(game_result_T, idx))
result.append(find_winner(game_result, idx))
result.append(find_winner_diag(game_result, [[i]*2 for i in range(3)]))
result.append(find_winner_diag(game_result, zip(range(3), sorted(range(3), reverse=True))))
O_win = result.count('O')
X_win = result.count('X')
if O_win == 0 and X_win == 0 or O_win == X_win:
return 'D'
if O_win > X_win:
return 'O'
else:
return 'X'
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
assert checkio([
"X.O",
"XX.",
"XOO"]) == "X", "Xs wins"
assert checkio([
"OO.",
"XOX",
"XOX"]) == "O", "Os wins"
assert checkio([
"OOX",
"XXO",
"OXX"]) == "D", "Draw"
assert checkio([
"O.X",
"XX.",
"XOO"]) == "X", "Xs wins again"
Jan. 2, 2015