Salut à toi préparationnaire ! Après quelques mois de (re)découverte en première, deuxième, voire troisième année de ton cours favori qu’est l’informatique, Major-prépa pense à toi et te permet de passer le temps avec de nouveaux jeux Scilab toujours aussi instructifs. Dans cet épisode, vous saurez comment jouer au 421 sans vous fatiguer à lancer des dés ! Et pour les plus motivés, engranger au passage de précieux points qui peuvent faire la différence (fin de l’article à voir pour tous et encore plus pour les ECE) ! Attention, si vous commencez juste Scilab cette année, il faudra bien vous accrocher si vous voulez comprendre la logique de cette expérience. Dans tous les cas, et pour bien suivre cet article, n’hésitez pas à revoir les fonctions grand et rand, les tableaux/matrices sous Scilab, et la boucle while 😉

Les règles du jeu

 Pour ceux qui ne connaitraient pas ce jeu populaire de bars, il s’agit de lancer un dé de façon à avoir les nombres 4, 2 et 1 le plus vite possible. Ainsi, vous commencez à lancer trois dés. Si aucun des nombres 4, 2, 1 ne tombent, vous continuez. Si un ou plusieurs des dés tombe sur 4, 2 ou 1, vous mettez de côté le ou les dés en question puis lancer le ou les autres dés jusqu’à obtenir le fameux 421.

Le code Scilab

 Mais sans plus tarder, voici une manière parmi d’autres de simuler cette expérience avec ce code prêt à emploi :

function n=jeu_421()

resultats_obtenus = zeros(1,6);

nbr_lancers = 3;

n = 0;

while nbr_lancers >0

n = n+1;

X = grand(1,nbr_lancers,’uin’,1,6)

resultats_obtenus(X)=1

nbr_lancers = 3-(resultats_obtenus(1)+resultats_obtenus(2)+resultats_obtenus(4))

disp(X)

end

endfunction

jeu_421()

NB : Si vous souhaitez un peu plus d’interaction, rajoutez au début de la boucle while un a=input (‘Tente ta chance en appuyant sur entrée’). Ca permettra de voir les lancers de dés au fur et à mesure en interrompant la boucle!

Son explication pour les plus téméraires

 Afin de bien comprendre ce programme, il est bien nécessaire de toujours garder les règles du jeu en tête. En effet, on lance des dés successivement jusqu’à « ne plus en avoir ». On voit donc que la commande while est la plus appropriée et qu’une répétition de boucle va venir aider.

Mais le plus important est bien de créer une fonction qui puisse afficher le nombre de tours qu’on a passé à lancer le dé (n tours). Pour commencer on va donc noter cette fonction, function n=jeu_421(). Il n’y a rien dans les parenthèses, car l’expérience ne dépend pas de paramètres (comme le nombre de lancers ou la probabilité d’un événement par exemple), elle est unique et aléatoire !

Notons donc nbr_lancers, le nombre de dés restant à lancer à chaque tour. On fixe ce nombre à 3. Ensuite, on introduit la fameuse commande : while nbr_lancers>0. Pendant qu’on joue, on va devoir lancer des dés tour après tour (n=n+1 à chaque nouvelle boucle).

Il faut alors tour après tour tirer au sort des nombres allant de 1 à 6, autrement dit simuler une loi uniforme discrète sur [1-6] avec grand, que l’on va afficher dans une matrice ligne X à 1, 2, ou 3 éléments selon le nombre de dés restant.

Jusque-là, tout semble relativement clair, et c’est là que la principale difficulté du programme apparaît : celle de faire diminuer le nombre de dés restants compte tenu de l’obtention d’un 4, d’un 2 ou d’un 1. Pour ce faire, on peut avoir l’idée d’introduire auparavant une matrice ligne composée de six zéros (résultats_obtenus). On fait alors en sorte au sein de la boucle que, dès que le score x d’un dé tombe, le zéro se trouvant à la ixième position devient un. Dès lors, on peut enlever un ou plusieurs dés à la fin de la boucle en soustrayant à nbr_lancers les nombres aux positionx 4, 2 et 1 du tableau résultats_obtenus. La boucle est alors prête.

Enfin, en plaçant les traditionnelles virgules afin de ne pas surcharger votre Scilab (certains se reconnaitront 😀 ), et sans oublier d’afficher les résultats des lancers à chaque tour pour rendre votre expérience utilisatrice plus réaliste (Disp (X)), vous êtes enfin prêts à jouer au 421 et surtout à impressionner vos camarades.

Petit complément

 Pour ceux qui aimeraient aller plus loin, et pourquoi pas gagner même facilement quelques points sur les questions d’informatique d’épreuves de Parisienne (ECE majoritairement, mais aussi ECS), la question qu’on pourrait alors se poser est celle de la moyenne du nombre de tours attendus jusqu’à l’obtention de ce 421.

Pour ce faire, vous aurez besoin de ce qu’on appelle la méthode de Monte-Carlo. Mais pas de panique ! Derrière ce nom « bling bling » se cache une méthode relativement simple, mais malheureusement assez méconnue des élèves d’ECE et qui tombe chaque année à presque toutes les épreuves de Parisienne (ESSEC I 2017/2016 ; HEC 2017/2016).

Le principe, donc, est de stocker un grand nombre de résultats d’expériences aléatoires (le plus grand possible) dans un tableau, puis d’en faire la moyenne empirique. Si vous voulez assurer des points facilement, retenez ce code dans le cas du 421 qui est, en l’adaptant, toujours la même chose :

A=zeros (1,100000);

for k=1:100000 ;

A(k)=jeu_421() ;      //c’est ici qu’on adapte l’expérience au code

end

mean(A)

Je vous laisse le suspens de découvrir la durée d’attente moyenne pour gagner au 421 ;).

Si vous avez la moindre question, remarque ou suggestion, n’hésitez pas à réagir. En attendant, bon courage pour vos futures révisions et n’oubliez pas que tout vient à point à qui sait attendre, qui plus est lorsqu’il s’agit des maths !

Intéressé par cet article, l’épisode 1 est disponible ici