TP d`algorithmique - bonus numéro 1 1 Le jeu des allumettes

publicité
Lycée Maximilien Sorre
Année 2014-2015
BTS SIO 1
TP d’algorithmique - bonus numéro 1
1
Le jeu des allumettes
Bob aime jouer au jeu des allumettes. Connaissez-vous ce jeu ? Le principe est simple. Ce
jeu se joue à deux. Il y a au départ 13 allumettes. Chacun à son tour, les joueurs retirent
entre une et trois allumettes. Celui qui retire la dernière allumette a perdu.
1.1
Allumettes pour débutants
Bob est le joueur 0, et son adversaire est le joueur 1 (Remarquons que 1 − 0 = 1 et 1 − 1 = 0).
Pour faciliter la tâche à son adversaire, Bob joue complètement au hasard.
Exercice 1. Dans un premier temps, Bob propose de commencer. Écrire un algorithme du
jeu des allumettes dans lequel :
• Bob commence.
• Bob retire un nombre aléatoire d’allumettes (indice : utiliser la fonction randint de la
bibliothèque random). Attention, Bob ne peut pas retirer plus d’allumettes qu’il n’en reste.
• L’algorithme affiche alors le nombre d’allumettes restantes.
• Bob propose ensuite à son adversaire de choisir le nombre d’allumettes qu’il veut retirer.
Ces allumettes sont retirées.
• Attention, le nombre d’allumettes choisi par l’adversaire de Bob doit être compris entre
1 et 3, et on ne peut pas retirer plus d’allumettes qu’il n’en reste. Tant que l’adversaire
de Bob choisi un nombre d’allumettes qui ne convient pas, l’algorithme doit afficher un
message d’erreur et redemander le nombre d’allumettes à retirer.
• L’algorithme affiche le nombre d’allumettes restantes.
• Et ainsi de suite jusqu’à qu’il ne reste plus d’allumettes.
• L’algorithme affiche alors le nom du gagnant (ou du perdant !).
Exercice 2. Cette fois-ci, Bob propose à son adversaire de choisir qui commence. Modifier
l’algorithme précédent en conséquence.
1.2
Allumettes pour experts
Maintenant, Bob en a marre de perdre. Cette fois-ci c’est sûr, il va écraser son adversaire.
Exercice 3.
1. Écrire la division euclidienne de 13 par 4.
2. Montrer que si celui qui joue en deuxième enlève systématiquement 4 moins le nombre
d’allumettes retirées par celui qui joue en premier, alors il gagne forcément.
1
3. Il reste n allumettes (où n est un entier strictement positif quelconque). Si (n-1) n’est
pas un multiple de 4, que doit-on jouer pour être sûr de gagner ?
Exercice 4. Reprendre l’algorithme de la section 1.1 en changeant le comportement de Bob
(Bob fait tout pour gagner).
Gros indice : en notant n le nombre d’allumettes restantes, si (n-1)=4*q+r :
1. Si q=0, alors Bob retire n-1 allumettes (si possible).
2. Si r>0 et q>0, alors Bob retire r allumettes.
3. Si q>0 et r=0, alors Bob joue au hasard.
Exercice 5. Apporter une touche finale à l’algorithme en proposant à l’adversaire de Bob
de choisir son niveau : niveau 1 pour les débutants, et niveau 2 pour les experts. On pourra
afficher un message d’erreur si le niveau choisi par le joueur n’est ni 1 ni 2.
2
Conversions entre la base 2 et la base 10
Exercice 6. Écrire un algorithme permettant de convertir un nombre en base 2 donné par
l’utilisateur en un nombre en base 10.
Indices : on peut écrire un nombre en binaire comme une chaîne de caractères. La taille d’une
chaîne de caractères est donnée par la commande « len ».
Exercice 7. Écrire un algorithme permettant de convertir un nombre en base 10 donné par
l’utilisateur en un nombre en base 2.
Indices : pour transformer un nombre en chaîne de caractères, on utilise la commande « str »,
et pour concaténer deux chaînes de caractères, on utilise le symbole +.
Exemple :
>>> "Bonjour " + "Bob."
‘Bonjour Bob.’
2
Téléchargement