Adloun

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.