Implémenter l'attracteur et résoudre les allumettes
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 20 — L'étude des jeux : attracteurs et minmax
Énoncé
Concevoir le graphe orienté représentant le jeu des allumettes pour et exécuter l'algorithme de calcul de l'attracteur pour valider la règle modulaire théorique et extraire les coups de la stratégie gagnante.
Corrigé
# Définition de l'arène pour n = 21
n = 21
S1 = {(r, 1) for r in range(n + 1)} # Tour de J1
S2 = {(r, 2) for r in range(n + 1)} # Tour de J2
succ = {}
for r in range(n + 1):
for j, autre in ((1, 2), (2, 1)):
# Coups possibles : retirer 1, 2 ou 3 allumettes sans dépasser le tas restant
succ[(r, j)] = [(r - p, autre) for p in (1, 2, 3) if p <= r]
# Cible : (0, 2) -> état terminal à 0 allumette où c'est à J2 de jouer (donc J1 gagne)
A, strategie = attracteur(S1, S2, succ, {(0, 2)})
# Validation des positions gagnantes pour J1
assert all(((r, 1) in A) == (r % 4 != 0) for r in range(n + 1))
# Validation de la stratégie gagnante (ramener à un multiple de 4)
assert all(strategie[(r, 1)][0] % 4 == 0
for r in range(1, n + 1) if r % 4 != 0)
L'attracteur calcule exactement l'ensemble des positions gagnantes et extrait la stratégie théorique conforme au module 4.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.