feat: kata determins if Tic Tac Toe Match is won an by whom. Or a draw or still ongoing. test: test cases for Tic Tac Toe Checker

This commit is contained in:
Sandro Zimmermann 2026-06-24 15:37:45 +02:00
parent 04a3626071
commit b1208ced57
2 changed files with 47 additions and 0 deletions

View File

@ -0,0 +1,29 @@
def is_solved(board):
vertical_0 = [board[i][0] for i in range(len(board))]
vertical_1 = [board[i][1] for i in range(len(board))]
vertical_2 = [board[i][2] for i in range(len(board))]
diagonal_l = [board[i][i] for i in range(len(board))]
diagonal_r = [board[i][len(board) - 1 - i] for i in range(len(board))]
if len(set(board[0])) == 1 and 0 not in set(board[0]):
return board[0][0]
elif len(set(board[1])) == 1 and 0 not in set(board[1]):
return board[1][0]
elif len(set(board[2])) == 1 and 0 not in set(board[2]):
return board[2][0]
elif len(set(board[2])) == 1 and 0 not in set(board[2]):
return board[2][0]
elif len(set(vertical_0)) == 1 and 0 not in set(vertical_0):
return board[0][0]
elif len(set(vertical_1)) == 1 and 0 not in set(vertical_1):
return board[1][1]
elif len(set(vertical_2)) == 1 and 0 not in set(vertical_2):
return board[2][2]
elif len(set(diagonal_l)) == 1 and 0 not in set(diagonal_l):
return board[0][0]
elif len(set(diagonal_r)) == 1 and 0 not in set(diagonal_r):
return board[0][2]
elif 0 in board[0] or 0 in board[1] or 0 in board[2]:
return -1
else:
return 0

View File

@ -0,0 +1,18 @@
from src.codewars.kata_tic_tac_toe_checker import is_solved
import pytest
@pytest.mark.parametrize(
("board", "expected"),
[
([[0, 0, 1], [0, 1, 2], [2, 1, 0]], -1),
([[1, 1, 1], [0, 2, 2], [0, 0, 0]], 1),
([[2, 1, 2], [2, 1, 1], [1, 1, 2]], 1),
([[2, 1, 2], [2, 1, 1], [1, 2, 1]], 0),
([[1, 1, 1], [0, 2, 2], [0, 0, 0]], 1),
([[2, 1, 1], [0, 1, 1], [2, 2, 2]], 2),
([[1, 2, 1], [1, 1, 2], [2, 1, 2]], 0),
],
)
def test_is_solved(board, expected):
assert is_solved(board) == expected