1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
| Sub test()
With CreateObject("ScriptControl")
.Language = "JScript"
.AddCode Jv
Debug.Print .Run("go", "4, 3, 1, 7, 25, 3", 828)
End With
End Sub
Function Jv()
Jv = Jv & "var nb_a_tirer = 6; // combien de nombres à tirer aléatoirement" & vbCrLf
Jv = Jv & "var cible = 2;var nbalea='';var nbcible=0; // valeur cible" & vbCrLf
Jv = Jv & "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" & vbCrLf
Jv = Jv & "var operations_encours = new Array();" & vbCrLf
Jv = Jv & "var best_operations = new Array();" & vbCrLf
Jv = Jv & "var best_distance;" & vbCrLf
Jv = Jv & "var best_nb_op;" & vbCrLf
Jv = Jv & "var nbres_aleas = new Array(6,3,50,50,50,500); // tableau des nombres tirés pour calcul" & vbCrLf
Jv = Jv & "var operateurs = new Array('+','*','-','/');" & vbCrLf
Jv = Jv & "var compteur = 0;" & vbCrLf
Jv = Jv & "var resultat = '';" & vbCrLf
Jv = Jv & "" & vbCrLf
Jv = Jv & "" & vbCrLf
Jv = Jv & "// tirage d'un nombre cible aléatoirement" & vbCrLf
Jv = Jv & "function nombre_cible_aleatoire() {" & vbCrLf
Jv = Jv & " cible = 100 + Math.floor(900*Math.random());" & vbCrLf
Jv = Jv & "nbcible= cible;" & vbCrLf
Jv = Jv & "}" & vbCrLf
Jv = Jv & "// tirage des nombres pour le calcul" & vbCrLf
Jv = Jv & "function nombres_aleatoires() {" & vbCrLf
Jv = Jv & " var texte = '';" & vbCrLf
Jv = Jv & " for(i=0;i<nb_a_tirer;i++)" & vbCrLf
Jv = Jv & " {" & vbCrLf
Jv = Jv & " b = 1 + Math.floor((nbres_dispos.length)*Math.random());" & vbCrLf
Jv = Jv & " texte = texte + ' ' + nbres_dispos[b-1];" & vbCrLf
Jv = Jv & " nbres_aleas[i] = nbres_dispos[b-1];" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " nbalea = texte;" & vbCrLf
Jv = Jv & "}" & vbCrLf
Jv = Jv & "// calcule de 2 nombres n1 et n2 avec 1 des 4 opérateurs" & vbCrLf
Jv = Jv & "function calcule(n1, n2, op){" & vbCrLf
Jv = Jv & " compteur = compteur + 1;" & vbCrLf
Jv = Jv & " var res;" & vbCrLf
Jv = Jv & " if(op == '+'){" & vbCrLf
Jv = Jv & " res = n1 + n2;" & vbCrLf
Jv = Jv & " operations_encours.push(n1+ op + n2 + '=' + res);" & vbCrLf
Jv = Jv & " return res;" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " if(op == '-') {" & vbCrLf
Jv = Jv & " if(n1 > n2)" & vbCrLf
Jv = Jv & " {" & vbCrLf
Jv = Jv & " res = n1 - n2;" & vbCrLf
Jv = Jv & " operations_encours.push(n1 + op + n2 + '=' + res);" & vbCrLf
Jv = Jv & " return res;" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " else" & vbCrLf
Jv = Jv & " {" & vbCrLf
Jv = Jv & " res = n2 - n1;" & vbCrLf
Jv = Jv & " operations_encours.push(n2 + op + n1 + '=' + res);" & vbCrLf
Jv = Jv & " return res;" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " if(op == '*')" & vbCrLf
Jv = Jv & " {" & vbCrLf
Jv = Jv & " res = n1 * n2;" & vbCrLf
Jv = Jv & " operations_encours.push(n1 + op + n2 + '=' + res);" & vbCrLf
Jv = Jv & " return res;" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " if(op == '/')" & vbCrLf
Jv = Jv & " {" & vbCrLf
Jv = Jv & " if(n1 >= n2){" & vbCrLf
Jv = Jv & " res = Math.floor(n1 / n2);" & vbCrLf
Jv = Jv & " if(res * n2 != n1) res = 0;" & vbCrLf
Jv = Jv & " operations_encours.push(n1 + op + n2 + '=' + res);" & vbCrLf
Jv = Jv & " return res;" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " else" & vbCrLf
Jv = Jv & " {" & vbCrLf
Jv = Jv & " res = Math.floor(n2 / n1);" & vbCrLf
Jv = Jv & " if(res * n1 != n2) res = 0;" & vbCrLf
Jv = Jv & " operations_encours.push(n2 + op + n1 + '=' + res);" & vbCrLf
Jv = Jv & " return res;" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & "}" & vbCrLf
Jv = Jv & "function go(Tin,Vin){" & vbCrLf
Jv = Jv & "nbres_aleas=Tin.split(',');cible=Vin; // réinitialisation des variables" & vbCrLf
Jv = Jv & " compteur = 0;" & vbCrLf
Jv = Jv & " best_distance = cible;" & vbCrLf
Jv = Jv & " best_nb_op = nb_a_tirer;" & vbCrLf
Jv = Jv & " operations_encours = new Array();" & vbCrLf
Jv = Jv & " best_operations = new Array();" & vbCrLf
Jv = Jv & " resultat = '';" & vbCrLf
Jv = Jv & " recherche_arbre(nbres_aleas); // recherche récursive" & vbCrLf
Jv = Jv & " if(best_distance ==0) resultat = resultat + 'Le compte est bon ! \n';" & vbCrLf
Jv = Jv & " else resultat = resultat + 'Le compte n est pas bon ! \n';" & vbCrLf
Jv = Jv & " affiche(compteur,best_operations);" & vbCrLf
Jv = Jv & "return resultat;" & vbCrLf
Jv = Jv & "}" & vbCrLf
Jv = Jv & "function recherche_arbre(tab){" & vbCrLf
Jv = Jv & " var nb_nombres = tab.length;" & vbCrLf
Jv = Jv & " var i,j,p;" & vbCrLf
Jv = Jv & " //if(nb_nombres<=best_nb_op){" & vbCrLf
Jv = Jv & " for(i=0;i<nb_nombres-1;i++) {" & vbCrLf
Jv = Jv & " for(j=i+1;j<nb_nombres;j++){" & vbCrLf
Jv = Jv & " for(p=0;p<4;p++){" & vbCrLf
Jv = Jv & " res = calcule(tab[i],tab[j],operateurs[p]); // on calcule et on empile" & vbCrLf
Jv = Jv & " if(res!=0){" & vbCrLf
Jv = Jv & " compare(res);" & vbCrLf
Jv = Jv & " var tab2 = new Array();" & vbCrLf
Jv = Jv & " tab2.push(res);" & vbCrLf
Jv = Jv & " for(k=0;k<nb_nombres;k++) if(k!=i && k!=j) tab2.push(tab[k]);" & vbCrLf
Jv = Jv & " if(tab2.length>1 && operations_encours.length<best_nb_op-1) recherche_arbre(tab2);" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " operations_encours.pop(); // on dépile" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & "}" & vbCrLf
Jv = Jv & "" & vbCrLf
Jv = Jv & "" & vbCrLf
Jv = Jv & "function compare(n){" & vbCrLf
Jv = Jv & " if(n==cible && operations_encours.length<best_nb_op){" & vbCrLf
Jv = Jv & " best_distance = 0;" & vbCrLf
Jv = Jv & " best_nb_op = operations_encours.length;" & vbCrLf
Jv = Jv & " copie_vers_best_operations();" & vbCrLf
Jv = Jv & " //resultat = 'Le compte est bon ! \n';" & vbCrLf
Jv = Jv & " //affiche(compteur,operations_encours);" & vbCrLf
Jv = Jv & " //break;" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " else{" & vbCrLf
Jv = Jv & " if(best_distance !=0){" & vbCrLf
Jv = Jv & " var distance = Math.abs(n-cible);" & vbCrLf
Jv = Jv & " if(distance < best_distance){" & vbCrLf
Jv = Jv & " best_distance = distance;" & vbCrLf
Jv = Jv & " copie_vers_best_operations();" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & "}" & vbCrLf
Jv = Jv & "function copie_vers_best_operations(){" & vbCrLf
Jv = Jv & " for(i=0;i<operations_encours.length;i++) best_operations[i] = operations_encours[i];" & vbCrLf
Jv = Jv & " for(i=operations_encours.length;i<nb_a_tirer-1;i++) best_operations[i] = '';" & vbCrLf
Jv = Jv & "}" & vbCrLf
Jv = Jv & "function affiche(nb_operations, tab_operations){" & vbCrLf
Jv = Jv & " resultat = resultat + 'Profondeur de recherche : ' + nb_operations + '\n';" & vbCrLf
Jv = Jv & " var i;" & vbCrLf
Jv = Jv & " for(i=0;i<tab_operations.length;i++){" & vbCrLf
Jv = Jv & " resultat = resultat + tab_operations[i] + '\n';" & vbCrLf
Jv = Jv & " }" & vbCrLf
Jv = Jv & " return resultat;;" & vbCrLf
Jv = Jv & "}"
End Function |
Partager