Algorithme le compte est bon
Le compte est bon. Code source et algorithme du compte est bon en javascript. Démonstration de l'algorithme : jouez en ligne au compte est bon !
samedi 2 avril 2011
Algorithme code source du compte est bon
Voici le code javascript du célèbre jeu le compte est bon.
<script language="Javascript">
var nb_a_tirer = 6; // combien de nombres à tirer aléatoirement
var cible = 2; // valeur cible
var nbres_dispos = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 25, 50, 75, 100); // nombres dispos pour tirage aléatoire
var operations_encours = new Array();
var best_operations = new Array();
var best_distance;
var best_nb_op;
var nbres_aleas = new Array(6,3,50,50,50,500); // tableau des nombres tirés pour calcul
var operateurs = new Array('+','*','-','/');
var compteur = 0;
var resultat = '';
// tirage d'un nombre cible aléatoirement
function nombre_cible_aleatoire() {
cible = 100 + Math.floor(900*Math.random());
document.forme.nbcible.value = cible;
}
// tirage des nombres pour le calcul
function nombres_aleatoires() {
var texte = '';
for(i=0;i<nb_a_tirer;i++)
{
b = 1 + Math.floor((nbres_dispos.length)*Math.random());
texte = texte + ' ' + nbres_dispos[b-1];
nbres_aleas[i] = nbres_dispos[b-1];
}
document.forme.nbalea.value = texte;
}
// calcule de 2 nombres n1 et n2 avec 1 des 4 opérateurs
function calcule(n1, n2, op){
compteur = compteur + 1;
var res;
if(op == '+'){
res = n1 + n2;
operations_encours.push(n1+ op + n2 + '=' + res);
return res;
}
if(op == '-') {
if(n1 > n2)
{
res = n1 - n2;
operations_encours.push(n1 + op + n2 + '=' + res);
return res;
}
else
{
res = n2 - n1;
operations_encours.push(n2 + op + n1 + '=' + res);
return res;
}
}
if(op == '*')
{
res = n1 * n2;
operations_encours.push(n1 + op + n2 + '=' + res);
return res;
}
if(op == '/')
{
if(n1 >= n2){
res = Math.floor(n1 / n2);
if(res * n2 != n1) res = 0;
operations_encours.push(n1 + op + n2 + '=' + res);
return res;
}
else
{
res = Math.floor(n2 / n1);
if(res * n1 != n2) res = 0;
operations_encours.push(n2 + op + n1 + '=' + res);
return res;
}
}
}
function go(){
// réinitialisation des variables
compteur = 0;
best_distance = cible;
best_nb_op = nb_a_tirer;
operations_encours = new Array();
best_operations = new Array();
resultat = '';
recherche_arbre(nbres_aleas); // recherche récursive
if(best_distance ==0) resultat = resultat + "Le compte est bon ! \n";
else resultat = resultat + "Le compte n est pas bon ! \n";
affiche(compteur,best_operations);
document.forme.go.value = resultat;
}
function recherche_arbre(tab){
var nb_nombres = tab.length;
var i,j,p;
//if(nb_nombres<=best_nb_op){
for(i=0;i<nb_nombres-1;i++) {
for(j=i+1;j<nb_nombres;j++){
for(p=0;p<4;p++){
res = calcule(tab[i],tab[j],operateurs[p]); // on calcule et on empile
if(res!=0){
compare(res);
var tab2 = new Array();
tab2.push(res);
for(k=0;k<nb_nombres;k++) if(k!=i && k!=j) tab2.push(tab[k]);
if(tab2.length>1 && operations_encours.length<best_nb_op-1) recherche_arbre(tab2);
}
operations_encours.pop(); // on dépile
}
}
}
}
function compare(n){
if(n==cible && operations_encours.length<best_nb_op){
best_distance = 0;
best_nb_op = operations_encours.length;
copie_vers_best_operations();
//resultat = 'Le compte est bon ! \n';
//affiche(compteur,operations_encours);
//break;
}
else{
if(best_distance !=0){
var distance = Math.abs(n-cible);
if(distance < best_distance){
best_distance = distance;
copie_vers_best_operations();
}
}
}
}
function copie_vers_best_operations(){
for(i=0;i<operations_encours.length;i++) best_operations[i] = operations_encours[i];
for(i=operations_encours.length;i<nb_a_tirer-1;i++) best_operations[i] = '';
}
function affiche(nb_operations, tab_operations){
resultat = resultat + 'Profondeur de recherche : ' + nb_operations + '\n';
var i;
for(i=0;i<tab_operations.length;i++){
resultat = resultat + tab_operations[i] + '\n';
}
document.forme.go.value = resultat;;
}
</script>
<form name="forme">
<a href="javascript:nombre_cible_aleatoire();">Générer nombre cible aléatoire</a> <input maxlength="35" name="nbcible" size="35" /></input> <a href="javascript:nombres_aleatoires();">Nombres aléatoires</a> <input maxlength="35" name="nbalea" size="35" /></input> <a href="javascript:go();">Go!</a> <textarea cols="80" name="go" rows="10"></textarea> </form>
Programme le compte est bon en Javascript
La recherche peut prendre un certain temps. Nous vous conseillons d'utiliser Chrome dont le moteur Javascript s'avère bien plus rapide qu'Internet Explorer pour l'exécution de ce script.
Inscription à :
Articles (Atom)