Working solution for L
This commit is contained in:
parent
bfdce7b68f
commit
1fbed03fa3
2 changed files with 109 additions and 0 deletions
79
ttt_tomek.py
Normal file
79
ttt_tomek.py
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
def ttt_state(M):
|
||||||
|
row_res = [[0,0],[0,0],[0,0],[0,0]]
|
||||||
|
row_t = [False] * 4
|
||||||
|
col_res = [[0,0],[0,0],[0,0],[0,0]]
|
||||||
|
col_t = [False] * 4
|
||||||
|
diag_res = [[0, 0], [0, 0]]
|
||||||
|
diag_t = [False, False]
|
||||||
|
board_not_full = False
|
||||||
|
|
||||||
|
for i in range(4):
|
||||||
|
for j in range(4):
|
||||||
|
if M[i][j] == '.':
|
||||||
|
board_not_full = True
|
||||||
|
continue
|
||||||
|
inc_r = True
|
||||||
|
inc_c = True
|
||||||
|
if M[i][j] == 'T':
|
||||||
|
inc_r = not row_t[i]
|
||||||
|
inc_c = not col_t[j]
|
||||||
|
row_t[i] = True
|
||||||
|
col_t[j] = True
|
||||||
|
IS = [M[i][j] == 'X' or M[i][j] == 'T', M[i][j] == 'O' or M[i][j] == 'T']
|
||||||
|
for k in range(2):
|
||||||
|
row_res[i][k] += 1 if inc_r and IS[k] else 0
|
||||||
|
col_res[j][k] += 1 if inc_c and IS[k] else 0
|
||||||
|
for i in range(4):
|
||||||
|
j = 3 - i
|
||||||
|
inc_diag = [True, True]
|
||||||
|
if M[i][i] == 'T':
|
||||||
|
inc_diag[0] = not diag_t[0]
|
||||||
|
diag_t[0] = True
|
||||||
|
if M[i][j] == 'T':
|
||||||
|
inc_diag[1] = not diag_t[1]
|
||||||
|
diag_t[1] = True
|
||||||
|
IS = [[M[i][i] == 'X' or M[i][i] == 'T', M[i][i] == 'O' or M[i][i] == 'T'],
|
||||||
|
[M[i][j] == 'X' or M[i][j] == 'T', M[i][j] == 'O' or M[i][j] == 'T']]
|
||||||
|
for k in range(2):
|
||||||
|
for l in range(2):
|
||||||
|
diag_res[k][l] += 1 if inc_diag[k] and IS[k][l] else 0
|
||||||
|
|
||||||
|
x_won = False
|
||||||
|
o_won = False
|
||||||
|
for row in row_res:
|
||||||
|
if row[0] == 4:
|
||||||
|
x_won = True
|
||||||
|
if row[1] == 4:
|
||||||
|
o_won = True
|
||||||
|
for col in col_res:
|
||||||
|
if col[0] == 4:
|
||||||
|
x_won = True
|
||||||
|
if col[1] == 4:
|
||||||
|
o_won = True
|
||||||
|
for i in range(2):
|
||||||
|
if diag_res[i][0] == 4:
|
||||||
|
x_won = True
|
||||||
|
if diag_res[i][1] == 4:
|
||||||
|
o_won = True
|
||||||
|
|
||||||
|
if (x_won and o_won) or (not x_won and not o_won and not board_not_full):
|
||||||
|
return "Draw"
|
||||||
|
elif x_won:
|
||||||
|
return "X won"
|
||||||
|
elif o_won:
|
||||||
|
return "O won"
|
||||||
|
else:
|
||||||
|
return "Game has not completed"
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
n = int(input())
|
||||||
|
for i in range(1, n + 1):
|
||||||
|
M = []
|
||||||
|
for j in range(4):
|
||||||
|
M.append(input())
|
||||||
|
print("Case #" + str(i) + ": " + ttt_state(M))
|
||||||
|
if i < n:
|
||||||
|
input()
|
30
ttt_tomek.txt
Normal file
30
ttt_tomek.txt
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
6
|
||||||
|
XXXT
|
||||||
|
....
|
||||||
|
OO..
|
||||||
|
....
|
||||||
|
|
||||||
|
XOXT
|
||||||
|
XXOO
|
||||||
|
OXOX
|
||||||
|
XXOO
|
||||||
|
|
||||||
|
XOX.
|
||||||
|
OX..
|
||||||
|
....
|
||||||
|
....
|
||||||
|
|
||||||
|
OOXX
|
||||||
|
OXXX
|
||||||
|
OX.T
|
||||||
|
O..O
|
||||||
|
|
||||||
|
XXXO
|
||||||
|
..O.
|
||||||
|
.O..
|
||||||
|
T...
|
||||||
|
|
||||||
|
OXXX
|
||||||
|
XO..
|
||||||
|
..O.
|
||||||
|
...O
|
Reference in a new issue