Matrix pour binero

Fermé
Leo - 19 août 2021 à 19:10
 vortex - 20 août 2021 à 23:22
Bonjour tout le monde,

Je travailles pour la toute première fois sur du Python, je dois réaliser un jeu qui s'appelle (Binairo ou Binero en Français) ou bien Takuzo game.

je bloque sur la création de la matrix qui dois se faire avec les conditions suivantes:
Pas plus de deux 0 ou deux 1 consécutifs.
Chaque ligne et chaque colonne contiennent autant de 0 que de 1.
Deux lignes ou deux colonnes ne peuvent être identiques.

quelqu'un connaitrait une source ou une proposition pour réaliser la matrix?

Merci d'avance et excellente journée :)
A voir également:

3 réponses

Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
20 août 2021 à 11:31
Bonjour,

...la création de la matrice qui doit se faire ...

tu as essayé quelque chose ?

que sais tu faire en Python?

sais-tu faire une interface graphique ?
0
Bonjour Phil merci pour ta réponse,

j'ai essayé hier de générer une matrice en random en utilisant numpy:
parents = []

unique_found = False
while not unique_found:
candidate_array = np.random.choice([0, 1], size=(CELL,CELL))
if not any((candidate_array == x).all() for x in parents):
[(i, j) for i, j in enumerate(candidate_array)]
unique_found = True

parents.append(candidate_array)


ca retourne :
[[0 0 0 1 0 1]
[1 0 0 1 1 1]
[0 0 0 0 1 0]
[1 0 0 0 1 0]
[0 1 1 1 1 1]
[0 1 1 0 1 1]]

or ça ne remplis pas les conditions du jeu, j'essaye de trouver un moyen de le faire autrement car, j'ai l'impression que je dois passer par du backtracking pour ça.

si non pour l'interface graphique c'est en pygame pour cela pas de souci :)
0
yg_be Messages postés 23236 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 octobre 2024 1 539
20 août 2021 à 12:28
bonjour,
comment ferais-tu pour remplir la matrice de façon aléatoire si tu le faisais sans programme?
une fois que tu auras bien compris cela, tu pourras réfléchir à une méthode pour automatiser cela.
0
Bonsoir,

Ton code est bien trop simple et ne gère pas les cas de figures, et oui, l'idéal et surtout pour des raisons de performances est d'utiliser du backtracking.

Car sans (j'ai rapidement fait un code à l'arrache), pour une grille de 8x8 ça doit tourner autour des 500 générations en moyenne pour trouver une grille valide, mais ça monte rapidement dans les tours pour les tailles supérieures, parfois plus de 100 000 pour du 12x12... Donc pas viable d'attendre aussi longtemps juste pour faire ça. La contrainte la plus élevée est surtout que le nombre de 0 et 1 doivent être identique dans chaque lignes et colonnes, sinon ça roulerait parfaitement en terme de perfs sans ça.
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
20 août 2021 à 16:44
"Pas plus de deux 0 ou deux 1 consécutifs.
Chaque ligne et chaque colonne contiennent autant de 0 que de 1.
Deux lignes ou deux colonnes ne peuvent être identiques."

Ok, mais comme tu remplis les cases avec des nombres tirés au hasard, remplir les conditions ne peut pas se faire tout seul ...
0
yg_be Messages postés 23236 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 octobre 2024 1 539
20 août 2021 à 19:45
en gros, il y a deux options:
1) remplir en tenant compte des contraintes
2) faire au hasard, et éliminer les solutions ne répondant pas aux contraintes

tout en sachant que les deux approches peuvent, in fine, donner une distribution différente.
0