Académique Documents
Professionnel Documents
Culture Documents
laurent.jospin.59@free.fr, http://jospin.lstl.fr
Toute fonction demandée ou introduite dans une question précédente peut (évidemment) être utilisée dans une
question ultérieure même si vous ne l’avez pas écrite. Il est (évidemment) possible d’introduire, en les programmant
et en expliquant leur rôle, des fonctions intermédiaires. La clareté des fonctions pourra être prise en compte dans la
notation, il est donc conseillé d’écrire les commentaires utiles à la compréhension des programmes non triviaux et de
bien choisir le noms des fonctions et des variables.
On considère dans ce sujet des dés équilibrés ayant un nombre variable de faces. On ne s’intéresse pas à savoir
si ces dés peuvent être physiquement construits. Les faces portent des numéros (entiers naturels). Un même numéro
peut apparaitre sur plusieurs faces.
On représente un dé par la liste ordonnée de ses faces, par exemple : [0, 2, 5] est un dé à 3 faces : 0, 2 et 5. Dans
les programmes cette même liste sera du type list de Python et appelé tableau dans le texte.
1 Etude d’un dé
1. Ecrire une fonction qui prend un tableau en argument représentant un dé et vérifie que c’est une représentation
correcte d’un dé, c’est-à-dire que le tableau est ordonné par ordre croissant. La fonction devra renvoyer le booléen
adéquat (type bool).
2. Soit A un dé, on note A son espérance, c’est-à-dire la moyenne de ses faces. Ecrire une fonction qui renvoie
l’espérance d’un dé en argument.
3. Ecrire une fonction qui donne la variance d’un dé. On rappelle que la variance est la moyenne des carrés des écarts
à l’espérance.
5. Ecrire une fonction qui prend en argument deux dés et qui renvoie la probabilité que la face du premier dé soit
strictement inférieure à la face du second lors d’un tirage. Dans cette question, les deux dés peuvent avoir un nombre
différent de faces.
6. Ecrire une fonction est_battu_par qui prend en argument deux dés et qui renvoie un booléen indiquant si le
premier dé est battu par le second.
7. On dit qu’un dé du système est le meilleur du système s’il bat tous les autres. Pour déterminer l’existence d’un tel
dé, on procède en deux passes :
1
Système cyclique de dés
– on parcourt une première fois le tableau et on détermine l’indice du meilleur dé en supposant qu’il existe sur le
principe d’une recherche de l’indice du maximum
– on parcourt une seconde fois le tableau et on vérifie si le dé retenu bat tous les autres dés
Justifier que le dé retenu après la première passe est le seul dé qui peut être le meilleur du système.
8. Ecrire une fonction qui renvoie l’indice du meilleur dé d’un système s’il existe, et None sinon.
10. L’objectif est de déterminer si la relation est battu par est transitive sur le système de dés considéré. Pour cela, on
va appliquer l’algorithme suivant :
– déterminer si un dé bat tous les autres dans le système
– si c’est le cas, l’ôter du système puis recommencer jusqu’à ce qu’il ne reste qu’un seul dé (et renvoyer Vrai
alors)
– sinon, renvoyer Faux
Traduire l’algorithme précédent en une fonction qui prend en argument un système de dés et qui renvoie un
booléen indiquant si le système de dés est transitif. On prendra soin de ne pas produire d’effets de bord.
11. Ecrire une fonction qui renvoie, s’ils existent, trois dés d’un système de dés reçu en argument tel que le sous-
système constitué de ces 3 dés soit cyclique. On pourra renvoyer None s’il n’en existe pas.
12. Ecrire une fonction suivant(nombre, k) qui prend en argument un nombre sous la forme d’un tableau de chiffres
en base k + 1 et qui renvoie le suivant au sens usuel de la numération en base k + 1. Par exemple : suivant([0, 9,
8], 9) doit renvoyer [0, 9, 9] et suivant([0, 9, 9], 9) doit renvoyer [1, 0, 0].
13. En utilisant la fonction précédente, écrire une fonction liste_des qui prend en argument n et k et qui renvoie un
tableau contenant tous les dés ayant n faces bornées par k.
14. Afin d’éviter des opérations inutiles, réécrire la fonction suivant(nombre, k) en une fonction de_suivant(de
, k) qui renvoie directement le dé suivant dans la liste des dés. Indiquer les changements à effectuer sur la fonction
liste_des pour utiliser cette nouvelle fonction.
Pour votre curiosité, le système de dés : [1, 3, 8], [0, 5, 7] et [2, 4, 5] est cyclique.
Aussi le système des quatres dés d’Efron [0, 0, 4, 4, 4, 4], [3, 3, 3, 3, 3, 3], [2, 2, 2, 2, 6, 6] et [1, 1, 1, 5, 5, 5] est
également cyclique.
2
Système cyclique de dés
17. Ecrire une fonction qui prend en argument un dé à n1 faces et un dé à n2 faces et qui renvoie un dé à n1 + n2
faces correspondant aux faces des deux dés reçus en argument. On souhaite une complexité linéaire en n1 + n2 .