2017-10-18 4 views
1

Je veux vérifier toutes les conditions gagnantes possibles dans un jeu de tic-tac-toe, comment puis-je réécrire d'une manière fonctionnelle?Vérifier le vainqueur dans tic-tac-toe - NumPy/Python

board = numpy.array([[0, 0, 0], 
        [0, 0, 0], 
        [0, 0, 0]]) 
player = 1 

if any([(board[0, :] == player).all(), 
     (board[:, 0] == player).all(), 
     (board[1, :] == player).all(), 
     (board[:, 1] == player).all(), 
     (board[2, :] == player).all(), 
     (board[:, 2] == player).all()]): 
    print('Win') 
+2

Ne pas oublier de vérifier les victoires en diagonale. –

+0

bien souvenu @ TomKarzes! – Skhaz

Répondre

3

Utilisez la combinaison de any et all -

mask = board==player 
out = mask.all(0).any() | mask.all(1).any() 

Pour prendre en compte les diagonal, peu plus de travail -

out |= np.diag(mask).all() | np.diag(mask[:,::-1]).all() 
+2

Génial ... Aussi, pour les diagonales, vous feriez mask.diagonal(). All() 'et' mask [:: - 1] .diagonal(). All() '(si vous voulez prendre en compte ceux-ci) –

+0

Awesome Divakar! Merci les gars – Skhaz