[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日 | 作者:橘小佑

Copyright © Vantopics