IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Optimisation compte est bon


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut Optimisation compte est bon
    Bonjour à tous !

    Cela faisait un moment que je n'étais pas venu sur le forum, j'espère que vous me pardonnerez

    Je reviens donc vers vous, pour un petit programme personnel, qui comme indiqué dans le titre, est le jeu du compte est bon.

    J'ai déjà développé toute l'interface, ainsi que la recherche de solution et la possibilité d'effectuer les calculs. Ma demande est donc, si vous y convenez, d'optimiser le programme, et essentiellement la recherche de la solution optimale (qui est fonctionnelle, mais peut s'avérer relativement lente).

    Je joins le document (je sais, les règles du forum préconisent de mettre uniquement le code, mais l'application, vous en conviendrez, ne le permet pas vraiment), si vous êtes intéressés pour y jouer, ou pour m'aider à l'optimiser. (fichier xlsm, pas de mot de passe).

    Compte est bon.xlsm

    Merci d'avance pour votre aide

  2. #2
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    Personne en mesure de m'aider? En attendant, voici une petite correction apportée (le tirage de l'objectif aléatoire était erroné), ainsi qu'une très légère optimisation (Si la valeur maximale pouvant être obtenue avec l'ensemble des plaques est inférieure ou égale à la valeur objectif, alors celle-ci est la meilleure solution réalisable).

    J'imagine bien qu'il ne s'agit pas d'un projet pour débutants, mais je suis certain que sur le forum il y a des personnes très qualifiées pour m'aider dans ce projet.

    Si vous avez besoin que j'ajoute des commentaires dans mon code, je le ferais également avec plaisir ! (Et je comprends parfaitement qu'en leur absence, cela puisse rebuter certaines personnes).

    Merci d'avance

    Compte est bon.xlsm

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Notes que nous avons extrait ce script d'une page web. Que JavaScript à l'habitude de cohabiter avec des formulaires HTLM!

    Adapté pour adapté adaptons nous!
    "3" + "1" = "31" ; 3+1=4

  4. #4
    Invité
    Invité(e)
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    <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><br>
    <input type="text" size="35" maxlength="35" name="nbcible"></input><br>
    <a href="javascript:nombres_aleatoires();">Nombres aléatoires</a><br>
    <input type="text" size="35" maxlength="35" name="nbalea"></input><br>
    <a href="javascript:go();">Go!</a><br>
    <textarea cols="80" rows="10" name="go"></textarea>
    </form>
    Dernière modification par Invité ; 27/07/2017 à 13h55.

  5. #5
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    @dysorthographie

    Bonjour,

    Merci d'avoir répondu, mais je ne vois pas ce que tu apportes au projet
    Il est vrai que mon solveur est inspiré de l'algorithme javascript que tu as donné, source que j'aurais dû citer, veuillez m'en excuser, je le fais maintenant : Source première du solveur (code javascript)

    J'ai adapté le mieux possible ce code en VBA, mais je sais qu'il est possible de l'optimiser, d'ailleurs, voici une nouvelle version un peu plus rapide et plus aboutie (et commentée cette fois-ci)

    Compte est bon.xlsm

    Si quelqu'un a des idées pour l'optimiser encore, n'hésitez pas. Mon objectif est que la recherche de solutions se fasse en moins d'une minute, peu importe le cas. J'ai réussi à le faire passer de 3 min 30 dans le pire des cas à 2 minutes, mais je trouve cela encore long.

    NB : J'ai développé d'autres jeux également, dont les codes et interfaces sont de moi à 100% et que je mettrai bientôt dans les ressources, une fois ce jeu du compte est bon terminé (Masterming, memory, morpion, jeu du pendu, chaud-froid, le mot le plus long, ainsi qu'un solveur du petit bac à ma sauce). Et par la suite, ils devraient être complétés par un jeu de dames et un scrabble qui sont en cours de développement.

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par jeanmidudu Voir le message
    NB : J'ai développé d'autres jeux également (memory, jeu du pendu)
    J'en ai développé aussi avec animations pour mes enfants quand ils étaient petits, aucune difficulté particulière …

    Sinon par mieux que Robert (salut !) et j'en profite pour le citer :

    ___________________________________________________________________________________________________________
    Question bien formulée, solution assurée !

  7. #7
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour à tous,

    Je reviens sur cette discussion, avec un version beaucoup plus aboutie, tout à fait opérationnelle et plus optimisée du jeu "le compte est bon".
    Cette nouvelle version recherche les solutions dès que les nombres aléatoires sont générés, ainsi la recherche des solutions est effectuée en parallèle du jeu, ce qui permet d'avoir un certain gain de temps quant aux possibles attentes en fin de partie avant l'affichage des solutions.

    Sinon, je reste toujours à l'écoute de possibilités pour optimiser la recherche de solutions. Pour ce qui est de l'utilisation de scripts javascript (ou tout autre langage), ce n'est pas dans mon intérêt ici car l'objet "Scriptcontrol" n'est utilisable que sur les versions 32 bits d'Excel , or, je souhaite que mon jeu soit totalement portable (qu'il puisse fonctionner avec n'importe quelle version d'Excel, sans avoir besoin d'effectuer aucune configuration particulière).

    Le jeu est libre d'utilisation et de droits, merci simplement de me citer si vous le modifiez ou l'utilisez à vos fins

    compte est bon.xlsm

    Edit : suite à la très juste remarque de Daranc, j'ai retiré le classeur vide

  8. #8
    Membre Expert

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jeanmidudu Voir le message
    Et pour ceux qui ne veulent pas prendre de risque avec les fichiers .xlsm, le voici en .xlsx :
    donc sans le code , autant dire un classeur vide

  9. #9
    Invité
    Invité(e)
    Par défaut
    Code ça a l'avantage d'optimiser le temps de traitent! : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With CreateObject("ScriptControl")
       .Language = "JScript"
       .AddCode Jv
       Debug.Print .Run("go", "4, 3, 1, 7, 25, 3", 828)
     End With

  10. #10
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Code ça a l'avantage d'optimiser le temps de traitent
    Excuse-moi mais... je n'ai pas compris ce que tu voulais dire...
    Voulais-tu me faire comprendre que je peux exécuter du code javascript depuis VBA? Si oui, est-ce vraiment plus rapide?

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Oui tu peux exécuter du JavaScripts depuis Vb; oui c'est beaucoup plus rapide!
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 28/07/2017 à 12h40.

  12. #12
    Invité
    Invité(e)
    Par défaut
    bonjour,
    64 32 je vois pas le problème!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Function CreateObjectx86(sProgID)
     
        Static oWnd As Object
        Dim bRunning As Boolean
     
     
        #If Win64 Then
            bRunning = InStr(TypeName(oWnd), "HTMLWindow") > 0
            If IsEmpty(sProgID) Then
                If bRunning Then oWnd.Close
                Exit Function
            End If
            If Not bRunning Then
                Set oWnd = CreateWindow()
                oWnd.execScript "Function CreateObjectx86(sProgID): Set CreateObjectx86 = CreateObject(sProgID): End Function", "VBScript"
            End If
            Set CreateObjectx86 = oWnd.CreateObjectx86(sProgID)
        #Else
            If Not IsEmpty(sProgID) Then Set CreateObjectx86 = CreateObject(sProgID)
        #End If
     
     
    End Function
    Function CreateWindow()
     
     
        ' source http://forum.script-coding.com/viewtopic.php?pid=75356#p75356
        Dim sSignature, oShellWnd, oProc
     
     
        On Error Resume Next
        sSignature = Left(CreateObject("Scriptlet.TypeLib").GUID, 38)
        CreateObject("WScript.Shell").Run "%systemroot%\syswow64\mshta.exe about:""<head><script>moveTo(-32000,-32000);document.title='x86Host'</script><hta:application showintaskbar=no /><object id='shell' classid='clsid:8856F961-340A-11D0-A96B-00C04FD705A2'><param name=RegisterAsBrowser value=1></object><script>shell.putproperty('" & sSignature & "',document.parentWindow);</script></head>""", 0, False
        Do
            For Each oShellWnd In CreateObject("Shell.Application").Windows
                Set CreateWindow = oShellWnd.GetProperty(sSignature)
                If Err.Number = 0 Then Exit Function
                Err.Clear
            Next
        Loop
     
     
    End Function
     
     
     
     
    Sub Init()
    Set JVS = CreateObjectx86("ScriptControl")
    With JVS
       .Language = "JScript"
       .AddCode Jv
    ' Debug.Print .Run("nombres_aleatoires")
    ' Debug.Print .Run("nombre_cible_aleatoire")
    '   Debug.Print .Run("go", "4, 3, 1, 7, 25, 3", 828)
    End With
    End Sub
    Fichiers attachés Fichiers attachés

  13. #13
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Je n'avais pas pensé à l'utilisation de CreateObjectx86, je n'en ai pas l'habitude.

    En effet, vu comme cela ce serait bien plus efficace.
    Par contre, après test, ta fonction javascript de solveur du compte est bon ne fonctionne pas (fais le test avec "1,1,2,4,4,5,828").

    Du coup, je vais essayer de passer ma fonction au format javascript

  14. #14
    Invité
    Invité(e)
    Par défaut
    A vrais dire, comme tu le savais, elle n'est pas de moi je l'ai adapté pour la rendre interactive avec vba!

    Mais chez moi ça fonctionne win10 office 2017!

  15. #15
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Oui et comme c'était celle que j'utilisais initialement, cela m'a surpris. Après, peut-être que c'est la méthode initiale qui est erronée dans certains cas particuliers (comme lorsque le maximum pouvant être obtenu avec les 6 chiffres est inférieur à l'objectif par exemple), comme tu peux le voir ci-après :
    Nom : compte bon erroné.JPG
Affichages : 1514
Taille : 126,8 Ko A moins que je ne sois idiot, mais pour moi, 3 + 1 n'a jamais donné 31 et 8 + 31 n'a jamais donné 831.

    De plus, j'ai également amélioré un peu l'algorithme de base, du coup, je vais tenter d'utiliser javascript sur mon algo.
    Sinon, pour information je suis sous Win 10 avec Office 2016.

  16. #16
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2022
    Messages : 3
    Par défaut Le Compte Est Bon en Excel 2016 VBA
    Voici ma version du Compte est bon.

    J'ai utilisé une "worksheet" d'Excel comme interface utilisateur. L'interface ne permet pas de jouer, elle permet de spécifier ou générer une suite de 6 nombres (parmi les 24 plaques) et une cible entre 101 et 999 ainsi qu'un bouton "Solutionner".

    L'algorithme lui peut résoudre n'importe quel problème. Plus ou moins de 6 nombres (entre 1 et 2000000000) et une cible entre 1 et 2000000000. Attention si vous voulez solutionner un problème ayant plus de 6 nombres, l'algorithme étant récursif, vous pourriez dépasser la capacité de la plie. Aucune vérification n'a été faite en ce sens.

    Avec les restrictions de l'émission : 6 nombres (parmi les 24 plaques) et une cible entre 101 et 999, ça plante jamais sur un PC avec 10 Gb de RAM et les solutions trouvées sortent en moins de 40 secondes avec un CPU i7 d'Intel.

    Dites-moi ce que vous en pensez...
    Fichiers attachés Fichiers attachés

  17. #17
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 024
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 024
    Par défaut
    Bonjour,
    Merci pour votre application.
    D'ailleurs vous pouvez la déposer dans la rubrique "Contribuez" du site.

    Concernant le code, ne connaissant pas la Programmation Orientée Objet je n'ai rien compris (normal), donc j'aurais aimé, si possible, une explication de l'algorithme utilisé.

    Un plus : la possibilité de choisir manuellement les plaques (liste déroulante) et le nombre à trouver.

    Cordialement.

  18. #18
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 239
    Par défaut
    Hello,
    Citation Envoyé par laurent_ott Voir le message
    Un plus : la possibilité de choisir manuellement les plaques (liste déroulante) et le nombre à trouver.
    Pour la demande de Laurent, voici ce que je propose :
    1 - Ajout d'une case à cocher pour choisir la saisie manuelle
    2 - Ajout de 6 Listes déroulantes Activex correspondant aux 6 plaques
    Le bouton Générer devient un bouton Effacer lorsqu'on choisit la saisie manuelle. Dans ce cas le bouton Effacer, efface les plaques et le nombre à trouver.
    Les listes déroulantes sont masquées lorsque l'on est pas en saisie manuelle ou lorsque la solution apparaît.
    Procédures ajoutées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    'Initialisation des listes déroulantes pour saisie manuelle
     
    Private Sub InitCbPlaques()
    Dim ValPlaques As Variant: ValPlaques = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 25, 50, 75, 100)
    Dim ValPlaque
    Dim Ctrl
    For Each Ctrl In Me.OLEObjects
       If InStr(Ctrl.Name, "CbPlaque") Then
          Ctrl.Object.Clear
          For Each ValPlaque In ValPlaques
              Ctrl.Object.AddItem ValPlaque
          Next
          Ctrl.Visible = True
       End If
    Next
    End Sub
     
     
    'Masquage des listes déroulantes
    Private Sub CacherCbPlaques()
    Dim Ctrl
    For Each Ctrl In Me.OLEObjects
       If InStr(Ctrl.Name, "CbPlaque") Then
          Ctrl.Visible = False
       End If
    Next
    End Sub
    Voici ce que cela donne :

    Nom : CompteEstBon.gif
Affichages : 134
Taille : 207,1 Ko

    Le classeur est en pièce jointe. Il y a peut-être des bugs car je n'ai pas tout testé. Et Merci à Jacques pour son excellent code de départ.

    Ami calmant, J.P
    Fichiers attachés Fichiers attachés

  19. #19
    Invité
    Invité(e)
    Par défaut
    Ok

    Le + additionne les numérique et concatène les string donc java voila 3 et 1 comme de string???

    Puisque qu'il il multiplie divise et soustrait je penses que (3 * 1) +(1 * 1) = 4???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(op == '+'){" & vbCrLfJv = Jv & "  res = parseFloat(n1) + parseFloat(n2);" & vbCrLf
    Jv = Jv & "  operations_encours.push(n1+ op + n2 + '=' + res);" & vbCrLf
    Jv = Jv & "  return res;" & vbCrLf
    Jv = Jv & " }" & vbCrLf
    Code Complet : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    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 & "return nbcible;}" & 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 & "return texte;}" & 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 = parseFloat(n1) + parseFloat(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
    Dernière modification par Invité ; 18/01/2018 à 20h20.

Discussions similaires

  1. Jeu "Le compte est bon" avec récursivité
    Par elvis54 dans le forum Général Java
    Réponses: 1
    Dernier message: 19/11/2008, 07h50
  2. [Jeu "Le Compte est Bon"] Recherche algorithme
    Par Chriss21 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 29/10/2005, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo