https://leetcode.com/problems/find-winner-on-a-tic-tac-toe-game/
請找出圈圈叉叉的贏家,題目會給你一個陣列moves
,代表兩個玩家遊玩畫下記號的過程,請回傳現在的遊戲狀況,如果先手的玩家勝利就回傳'A'、後手的玩家勝利就回傳'B'、平手就回傳'Draw'、還在進行中就回傳'Pending'。
圈圈叉叉的勝利條件是3個符號的連線,而連出來的線有8種: 3個行方向的線、3個列方向的線、1個對角線、1個反對角線,所以我們只要觀察這6條線有沒有達到勝利條件就好
再來是如何標記是哪位選手的記號,我們在九宮格標記1代表先手玩家、以-1代表後手玩家,這樣出現勝利條件就是任一條線的積為3或-3
class Solution:
def tictactoe(self, moves: List[List[int]]) -> str:
rows, cols = [0] * 3, [0] * 3
diag1 ,diag2 = 0, 0
player = 1
for i, j in moves:
rows[i] += player
cols[j] += player
if i == j:
if i == 1:
diag1 += player
diag2 += player
else:
diag1 += player
if abs(i-j) == 2:
diag2 += player
if rows[i] == 3 or cols[j] == 3 or diag1 == 3 or diag2 == 3:
return 'A'
if rows[i] == -3 or cols[j] == -3 or diag1 == -3 or diag2 == -3:
return 'B'
player *= -1
return 'Pending' if len(moves) < 9 else 'Draw'
今天是簡單難度的題目,寫完之後就可以自己做個小遊戲了