from typing import List def checkio(game_result: List[str]) -> str: h = horizontal(game_result) v = vertical(game_result) d = diagonal(game_result) if h != "D": return h if v != "D": return v if d != "D": return d return "D" def horizontal(game_result: List[str]) -> str: for row in game_result: cells = list(row) cells.sort() if cells[0] == '.': continue if cells[0] == cells[-1:][0]: return cells[0] return "D" def vertical(game_result: List[str]) -> str: new_game_result = [] for i in range(len(game_result)): new_game_result.append(game_result[0][i] + game_result[1][i] + game_result[2][i]) return horizontal(new_game_result) def diagonal(game_result: List[str]) -> str: if game_result[1][1] == '.': return "D" if game_result[0][0] == game_result[1][1] and game_result[1][1] == game_result[2][2]: return game_result[1][1] if game_result[0][2] == game_result[1][1] and game_result[1][1] == game_result[2][0]: return game_result[1][1] return "D" if __name__ == '__main__': print("Example:") print(checkio(["X.O", "XX.", "XOO"])) # 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" assert checkio([".O.", "XXX", ".O."]) == "X", "Xs wins again" assert checkio(["...", "XXX", "OO."]) == "X", "Xs wins again" print("Coding complete? Click 'Check' to review your tests and earn cool rewards!")