# Time Complexity : O(n*n)
'''
x x x
o x x
o o x
0 1 2
1
2
0,0 --> 0,0 1,1, 2,2
0,2 --> 0,2 1,1 2,0
Centre === n/ 2 (1,1)
1,1 --> 0,0 1,1, 2,2
0,2 1,1 2,0
2,2 --> 2,2 1,1 0,0
2,0 --> 2,0 1,1 0,2
'''
def capturedRow(board, n, player):
# in this row has he captured the entire column
for i in range(n):
captured = True
for j in range(n):
if board[i][j] != player:
captured = False
break
return captured
def capturedColumn(board, n, player):
# in this column has he captured the entire row.
for i in range(n):
captured = True
for j in range(n):
if board[j][i] != player:
captured = False
break
return captured
def capturedDiagonal(board, n, player):
# in this diagonal has he captured the entire diagonal.
if board[0][0] == player:
i = 1
j = 1
while i < n and j < n:
if board[i][j] != player:
return False
i = i + 1
j = j + 1
return True
elif board[0][n - 1] == player:
i = 1
j = n - 2
while i < n and j > 0:
if board[i][j] != player:
return False
i = i + 1
j = j - 1
return True
def hasWon(player, board, n):
if capturedRow(board, n, player) or capturedColumn(board, n, player) or capturedDiagonal(board, n,player):
return True
return False
def print_board(Ar):
for i in range(len(Ar)):
for j in range(len(Ar)):
print(Ar[i][j], end=' ')
print()
print()
# board = [[0 for y in range(3)]for x in range(3)]
board = [[0, 0, 1],
[1, 1, 0],
[1, 1, 0]]
print_board(board)
player = 1
print("" + str(player) + " hasWon ? " + str(hasWon(player, board, 3)))
IyBUaW1lIENvbXBsZXhpdHkgOiBPKG4qbikKJycnCnggeCB4Cm8geCB4Cm8gbyB4CgoKMCAgMSAgMgoxCjIKCjAsMCAgLS0+IDAsMCAxLDEsIDIsMgowLDIgIC0tPiAwLDIgIDEsMSAyLDAKCkNlbnRyZSA9PT0gbi8gMiAgICgxLDEpCjEsMSAtLT4gMCwwIDEsMSwgMiwyCgkJMCwyICAxLDEgMiwwCgoyLDIgLS0+ICAyLDIgIDEsMSAgMCwwCjIsMCAgLS0+IDIsMCAgMSwxICAwLDIKJycnCgoKZGVmIGNhcHR1cmVkUm93KGJvYXJkLCBuLCBwbGF5ZXIpOgogICAgIyBpbiB0aGlzIHJvdyBoYXMgaGUgY2FwdHVyZWQgdGhlIGVudGlyZSBjb2x1bW4KCiAgICBmb3IgaSBpbiByYW5nZShuKToKICAgICAgICBjYXB0dXJlZCA9IFRydWUKICAgICAgICBmb3IgaiBpbiByYW5nZShuKToKICAgICAgICAgICAgaWYgYm9hcmRbaV1bal0gIT0gcGxheWVyOgogICAgICAgICAgICAgICAgY2FwdHVyZWQgPSBGYWxzZQogICAgICAgICAgICAgICAgYnJlYWsKICAgIHJldHVybiBjYXB0dXJlZAoKCmRlZiBjYXB0dXJlZENvbHVtbihib2FyZCwgbiwgcGxheWVyKToKICAgICMgaW4gdGhpcyBjb2x1bW4gaGFzIGhlIGNhcHR1cmVkIHRoZSBlbnRpcmUgcm93LgogICAgZm9yIGkgaW4gcmFuZ2Uobik6CiAgICAgICAgY2FwdHVyZWQgPSBUcnVlCiAgICAgICAgZm9yIGogaW4gcmFuZ2Uobik6CiAgICAgICAgICAgIGlmIGJvYXJkW2pdW2ldICE9IHBsYXllcjoKICAgICAgICAgICAgICAgIGNhcHR1cmVkID0gRmFsc2UKICAgICAgICAgICAgICAgIGJyZWFrCiAgICByZXR1cm4gY2FwdHVyZWQKCgpkZWYgY2FwdHVyZWREaWFnb25hbChib2FyZCwgbiwgcGxheWVyKToKICAgICMgaW4gdGhpcyBkaWFnb25hbCBoYXMgaGUgY2FwdHVyZWQgdGhlIGVudGlyZSBkaWFnb25hbC4KICAgIGlmIGJvYXJkWzBdWzBdID09IHBsYXllcjoKICAgICAgICBpID0gMQogICAgICAgIGogPSAxCiAgICAgICAgd2hpbGUgaSA8IG4gYW5kIGogPCBuOgogICAgICAgICAgICBpZiBib2FyZFtpXVtqXSAhPSBwbGF5ZXI6CiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgaSA9IGkgKyAxCiAgICAgICAgICAgIGogPSBqICsgMQogICAgICAgIHJldHVybiBUcnVlCgogICAgZWxpZiBib2FyZFswXVtuIC0gMV0gPT0gcGxheWVyOgogICAgICAgIGkgPSAxCiAgICAgICAgaiA9IG4gLSAyCiAgICAgICAgd2hpbGUgaSA8IG4gYW5kIGogPiAwOgogICAgICAgICAgICBpZiBib2FyZFtpXVtqXSAhPSBwbGF5ZXI6CiAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgaSA9IGkgKyAxCiAgICAgICAgICAgIGogPSBqIC0gMQogICAgICAgIHJldHVybiBUcnVlCgoKZGVmIGhhc1dvbihwbGF5ZXIsIGJvYXJkLCBuKToKCiAgICBpZiBjYXB0dXJlZFJvdyhib2FyZCwgbiwgcGxheWVyKSBvciBjYXB0dXJlZENvbHVtbihib2FyZCwgbiwgcGxheWVyKSBvciBjYXB0dXJlZERpYWdvbmFsKGJvYXJkLCBuLHBsYXllcik6CiAgICAgICAgICAgIHJldHVybiBUcnVlCgogICAgcmV0dXJuIEZhbHNlCgoKZGVmIHByaW50X2JvYXJkKEFyKToKICAgIGZvciBpIGluIHJhbmdlKGxlbihBcikpOgogICAgICAgIGZvciBqIGluIHJhbmdlKGxlbihBcikpOgogICAgICAgICAgICBwcmludChBcltpXVtqXSwgZW5kPScgJykKICAgICAgICBwcmludCgpCiAgICBwcmludCgpCgoKIyBib2FyZCA9IFtbMCBmb3IgeSBpbiByYW5nZSgzKV1mb3IgeCBpbiByYW5nZSgzKV0KCmJvYXJkID0gW1swLCAwLCAxXSwKICAgICAgICAgWzEsIDEsIDBdLAogICAgICAgICBbMSwgMSwgMF1dCnByaW50X2JvYXJkKGJvYXJkKQpwbGF5ZXIgPSAxCnByaW50KCIiICsgc3RyKHBsYXllcikgKyAiIGhhc1dvbiA/ICIgKyBzdHIoaGFzV29uKHBsYXllciwgYm9hcmQsIDMpKSkK