Articles liés au mot clé « javascript »
Mai 25

Une solution radicale à ce casse-tête vietnamien...En Javascript

Le buzz de la semaine c'est ce casse-tête de calcul qui a été donné à des élèves agés entre 8 et 9 ans dans une école de la ville de Bao Loc au Vietnam.

Si cela a fait autant de bruit c'est parce qu'il ne s'agit pas d'un simple petit exercice de calcul pour enfants, Non! C'est "LE problème de maths de CE2 qui rend fou le web et qui pose problème aux gros cerveaux d'Internet". En tout cas c'est ce que semblent croire les journalistes du figaro, de 20minutes et j'en passe...



Pour résumer: Il était question à la base d'un exercice de mathématiques destiné à des enfants d'un niveau équivalent au CE2 en France. Quand il s'aperçut que ses jeunes élèves peinaient à lui présenter une solution, Tran Truong, le professeur à l'origine de ce casse-tête a donc demandé à d'autres collègues mathématiciens et même à une "doctorante en économie" de se pencher là-dessus.
Ces derniers n'ont manifestement pas été plus brillants que des élèves de 8 ans.
c'est ainsi que ce petit problème d'arithmètique s'est retrouvé à faire le tour du web.


Et ce fameux problème voici à quoi il ressemble :

probleme maths vietnamien

Les règles sont simples : Il suffit de placer des chiffres de 1 à 9 dans les cases vides pour que le résultat final soit égal à 66. On ne peut pas utiliser deux fois le même chiffre!



Je ne sais pas si l'on peut me compter parmi les plus "gros cerveaux du web" mais en à peine un quart d'heure j'avais déjà trouvé une vingtaine de solutions différentes à ce problème!



Mon secret ? Je suis nul en maths et vraiment pas doué en calcul mental! Je n'ai donc même pas essayé de calculer quoi que ce soit quand on m'a présenté ce casse-tête. Je suis bien conscient de mon handicap dans ce domaine. Fort heureusement, j'ai le don de pouvoir trouver des solutions toutes bêtes mais aussi très efficaces à toute sorte de problèmes.
C'est également le cas de la méthode que j'ai utilisée: elle est toute bête! Ne vous attendez donc pas à découvrir des explications mathématiques avec des équations complexes etc...


Voici donc sans plus tarder ma solution...En javascript!

En dépit de mon handicap arithmétique, j'ai quand même bien compris que la forme en serpentin de ce casse-tête n'avait pas d'importance et qu'on pouvait aussi bien écrire la suite d'opérations de cette manière :

x[0] + 13 * x[1] / x[2] + x[3] + 12 * x[4] - x[5] - 11 + x[6] * x[7] / x[8] - 10  = 66
Evidemment les "x" correspondent aux cases vides; comme il y en a 9 ça nous fait 9 "x" à trouver.

 

On déclare donc une variable "x" vide qui sera un tableau (array)


var x = [];

Maintenant il faut remplir ce tableau avec neuf chiffres choisis au hazard. On peut créer une fonction pour ça et on pourra s'en servir plus tard.

function testnum() {
  while (x.length < 9) {
    var randomnumber=Math.floor((Math.random()*9)+1);
    var unique=false;
    if (x.indexOf(randomnumber) > -1) {
      unique=true;
    }
    if (!unique)x[x.length]=randomnumber;
  }
} 

 

La petite difficulté c'est qu'on ne doit pas avoir deux fois le même chiffre dans notre tableau x[]. Quand un chiffre aléatoire est généré il faut alors vérifier à chaque fois si il n'est pas déjà présent dans x[].
Pour cela on peut utiliser la méthode indexOf.
Elle permet de retourner la position d'un élément dans un tableau mais si l'élément que l'on cherche ne figure pas dans notre tableau indexOf va retourner -1.

Cette fonction que j'ai nommée testnum() va donc générer des valeurs pour x[0],x[1],x[2] etc...
Puisqu'il y a vraiment très peu de chances pour que les premiers chiffres générés correspondent directement à la solution de notre problème, il va falloir les tester.
On peut utiliser une autre boucle while.


var solution = 1;
while (solution < 21) {
// notre casse-tête
var problem = x[0]+13*x[1]/x[2]+x[3]+12*x[4]-x[5]-11+x[6]*x[7]/x[8]-10;   
if (problem != 66) {
    x = [];
    testnum();
  } else {
    document.write('
solution '+ solution +': '+x[0]+''+additi+'13'+ multipli +''+ x[1] +''+ divisi +''+ x[2] +''+ additi +''+ x[3] +''+ additi +'12'+ multipli +''+ x[4] +''+ soustracti +''+ x[5] +''+ soustracti +' 11 '+ additi +''+ x[6]+'' + multipli +''+ x[7] +'' + divisi +''+ x[8] +''+ soustracti +' 10 = 66 '); solution++; x = []; testnum(); } }

On veut essayer de trouver plusieurs solutions (20).
Quand une solution est trouvée il suffit d'incrémenter la variable "solution" sinon la boucle ne s'arrêtera jamais.
Quand une solution n'est pas bonne on efface le contenu du tableau "x" et on fait appel à notre fonction testnum() qui va le remplir a nouveau avec des valeurs fraîchement générées


x = [];
testnum();

Et voilà , c'est tout ! Le reste c'est pour faire joli, d'ailleurs vous pouvez voir ce que ça donne ici : démo

Lire la suite
Fév 03

Animation avec Adobe Edge Animate

Une animation pour vous souhaiter une bonne année 2015. (à voir ici)
La musique provient d'un superbe musicdisk créé par Razor 1911 (http://www.pouet.net/prod.php?which=7989)

Lire la suite