dans la ou les catégorie(s) : code

Voici un algorithme basé sur le jeu du 421, on lance trois dés et on veut savoir si on a un 4, un 2 et un 1.
La première étape consiste à traduire les dés en code.
Je crée trois variables a, b, c et j’y associe un chiffre entier au hasard entre 1 et 6 inclus.

  /*
  les 3 dés 
  */
 
  /* un chiffre entier aléatoire entre 1 et 6 */
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
  function getRandomIntInclusive(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min; 
    //The maximum is inclusive and the minimum is inclusive 
  }
 
  /* 1er chiffre */
  var a = getRandomIntInclusive(1,6);
  /* 2e */
  var b = getRandomIntInclusive(1,6);
  /* 3e */
  var c = getRandomIntInclusive(1,6);

Avec les nouvelles fonctions du JavaScript es6, on peut savoir si un tableau contient une valeur précise (il s’agit d’une boucle adaptée).

  var tableau = [a,b,c];
  tableau.some(function(e){return e === 4;}) // true

Il reste à mettre ceci dans une condition (if) avec l’opérateur logique « et (&&) » et notre algorithme est opérationnel.

   if(
    tableau.some(function(e){return e === 4;}) && 
    tableau.some(function(e){return e === 2;}) && 
    tableau.some(function(e){return e === 1;})
  ){
   console.log('win'); 
  }else{
   console.log('loose');
  }

Ton astuce est plus grande que la mienne

Vous trouverez sur le net d’autres algorithmes plus ou moins lisibles, mais il existe pour le 421, une astuce magique.
1re remarque
Si vous faites 4 × 2 × 1 ou 2 × 4 × 1, qu’importe l’ordre, on obtient 8. A‑t-on une autre combinaison qui fait 8… hélas oui, 2 × 2 × 2 = 8.
2e remarque
Si vous faites 4 + 2 + 1 qu’importe l’ordre, on obtient 7. A‑t-on une autre combinaison qui fait 7, hélas oui 3+3+1 ou 5+1+1.
3e remarque
À priori, ni la première remarque, ni la seconde s’avère utile pour faire un algorithme et pourtant il suffit de combiner les deux et vous avez un test parfait, rapide et efficace.
Si dé1 × dé2 × dé3 = 8 ET dé1 + dé2 + dé3 = 7, on a bien un 421.

Code final

  /*
  les 3 dés 
  */
 
  /* un chiffre entier aléatoire entre 1 et 6 */
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random
  function getRandomIntInclusive(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min; 
    //The maximum is inclusive and the minimum is inclusive 
  }
 
  /* 1er chiffre */
  var a = getRandomIntInclusive(1,6);
  /* 2e */
  var b = getRandomIntInclusive(1,6);
  /* 3e */
  var c = getRandomIntInclusive(1,6);
 
 
  /* algo I moderne en es6 */
  var tableau = [a,b,c];
 
  console.log(tableau);
 
  /* a-t-on un 4 ET */
  /* a-t-on un 2 ET */
  /* a-t-on un 1 ? */
 
  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some
 
  if(
    tableau.some(function(e){return e === 4;}) && 
    tableau.some(function(e){return e === 2;}) && 
    tableau.some(function(e){return e === 1;})
  ){
   console.log('win'); 
  }else{
   console.log('loose');
  }
 
  /* algo II classique */
  /* malin */
  if(a*b*c === 8 && a+b+c === 7){
   console.log('smart win'); 
  }else{
   console.log('smart loose'); 
  }

See the Pen 421 by Benoît Wimart (@benoitwimart) on CodePen.0