Le cul-de-sac de
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 27 — Jeux, stratégies et recherche heuristique
Énoncé
Un graphe à quatre positions : (à ) ; (à ) n'a aucun coup ; (à ) ; et est la cible. Que dit la définition de l'attracteur sur et sur ? Que rend le code du cours ? Conclure.
Corrigé
La définition. L'étage contient . Pour , qui n'a aucun successeur, cette condition porte sur un ensemble vide de coups : elle est vraie par vacuité. Donc , puis puisque peut y aller.
Le code. Il initialise restant au degré sortant et ne décrémente que lorsqu'un successeur est retiré de la file. Une position de de degré n'a aucun successeur, donc n'est jamais atteinte par la boucle, donc n'est jamais marquée. Exécution :
| position | code du cours | définition |
|---|---|---|
| (à ) | faux | vrai |
| (à , sans coup) | faux | vrai |
| (à ) | vrai | vrai |
| (cible) | vrai | vrai |
Les deux ne disent pas la même chose. La correction tient en trois lignes : avant la boucle, on met dans la file toute position de dont le compteur vaut déjà .
(* À ajouter APRÈS l'initialisation par la cible et AVANT la boucle :
une position de J2 sans aucun coup satisfait le « pour tout » par vacuité. *)
Array.iteri (fun p r ->
if ctrl.(p) = 2 && r = 0 && not dans.(p) then begin
dans.(p) <- true; Queue.push p f
end) restant;
Ce que ce cas signifie dans le jeu, et c'est là qu'il faut choisir. Un joueur qui ne peut plus jouer a perdu : c'est la convention normale, et elle rend la définition juste. Si l'on adopte au contraire la convention « la partie s'arrête et personne ne gagne », alors ce sont les positions terminales qu'il faut classer explicitement dans , ou « nul » — les trois types d'états finals du programme — et le code redevient juste, mais la définition doit être restreinte aux positions non terminales.
La règle générale, et elle vaut au-delà de ce chapitre : un quantificateur universel sur un ensemble vide est vrai, et c'est le cas que les implémentations oublient. On l'a déjà rencontré au chapitre chap:logique ; on le retrouvera partout où une boucle « pour tout successeur » se traduit par un compteur.
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.