From b1208ced57a6449687300662896bb9bfc34fa4b3 Mon Sep 17 00:00:00 2001 From: zimmersandro Date: Wed, 24 Jun 2026 15:37:45 +0200 Subject: [PATCH] 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 --- src/codewars/kata_tic_tac_toe_checker.py | 29 +++++++++++++++++++ .../test_tic_tac_toe_checker.py | 18 ++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/codewars/kata_tic_tac_toe_checker.py create mode 100644 tests/tests_codewars/test_tic_tac_toe_checker.py diff --git a/src/codewars/kata_tic_tac_toe_checker.py b/src/codewars/kata_tic_tac_toe_checker.py new file mode 100644 index 0000000..aa7fe8f --- /dev/null +++ b/src/codewars/kata_tic_tac_toe_checker.py @@ -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 diff --git a/tests/tests_codewars/test_tic_tac_toe_checker.py b/tests/tests_codewars/test_tic_tac_toe_checker.py new file mode 100644 index 0000000..fa6111b --- /dev/null +++ b/tests/tests_codewars/test_tic_tac_toe_checker.py @@ -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