## [Python] Checkio Solution 解答 – Xs and Os Referee

架網編程

### Problem:

Tic-Tac-Toe, sometimes also known as Xs and Os, is a game for two players (X and O) who take turns marking the spaces in a 3×3 grid. The player who succeeds in placing three respective marks in a horizontal, vertical, or diagonal rows (NW-SE and NE-SW) wins the game.

But we will not be playing this game. You will be the referee for this games results. You are given a result of a game and you must determine if the game ends in a win or a draw as well as who will be the winner. Make sure to return "X" if the X-player wins and "O" if the O-player wins. If the game is a draw, return "D".

A game's result is presented as a list of strings, where "X" and "O" are players' marks and "." is the empty cell.

### Level:

Simple

### Input:

A game result as a list of strings (unicode).

### Output:

"X", "O" or "D" as a string.

### Precondition:

There is either one winner or a draw.

len(game_result) == 3

all(len(row) == 3 for row in game_result)

*Source: https://py.checkio.org*

### My Solution:

```
def checkio(game_result):
#check horizontal
for r in [0,1,2]:
if game_result[r][0] == game_result[r][1] == game_result[r][2] and game_result[r][0] != ".":
return game_result[r][0]
#check vertical
for c in [0,1,2]:
if game_result[0][c] == game_result[1][c] == game_result[2][c] and game_result[0][c] != ".":
return game_result[0][c]
#check diagonal
if game_result[0][0] == game_result[1][1] == game_result[2][2] or game_result[2][0] == game_result[1][1] == game_result[0][2]:
if game_result[1][1] != ".":
return game_result[1][1]
else:
return "D"
else:
return "D"
```

### Comment:

My first simple problem. There are generally three ways to win this game, which are horizontal, vertical, and diagonal. After breaking the problem into three scenerios and using for loop as well as if statement, the problem is solved. But do have to be careful with ".".

發佈日期：2017年9月18日 | 作者：橘小佑