Partage
  • Partager sur Facebook
  • Partager sur Twitter

Liste de combinaisons

Sujet résolu
    21 août 2011 à 20:09:36

    Bonjour,

    J'ai besoin d'avoir un code qui retourne toutes les combinaisons possible d'une chaine de caractère.
    Exemple : 'ABC' me donnerai ABC, ACB, BAC, BCA, CAB, CBA

    Jusque la pas de problème car voici le code ^^:

    function faire_combi(chaine, tmp, len, ind) {
      if (ind >= len) {
    	 $('#visu').append('<br /> tmp : '+tmp);
        return;
      }
      for (var i = 0; i < len; i++) {
        if (chaine[i] != '!') {
          var pt = chaine[i];
    	  var origineChaine = chaine;
    	 
    	  chaine = chaine.substr(0, i);
    	  chaine += '!';
    	  chaine += origineChaine.substr(i+1, len);
    	  
          tmp[ind] = pt;
          faire_combi(chaine, tmp, len, ind+1);
    	  
    	  chaine = origineChaine.substr(0, i);
    	  chaine += pt;
    	  chaine += origineChaine.substr(i+1, len);
    	  
        }
      }
    }
    
    var chaine = 'abc';
    var len = chaine.length;
    faire_combi(chaine, [], len, 0);
    


    Mon soucis est que j'ai besoin de passer en paramètre un chiffre qui donnerai les combinaisons possible sur une longueur donnée.
    Exemple : 'ABC' (avec ma fonction) en ajoutant le nouveau paramètre à la valeur 2 donnerai AB, AC, BC

    J'ai trouvé un site qui me permettrai d'avoir le nombre de résultats possibles mais pas de les avoirs... (http://www.dcode.fr/generer-calculer-combinaisons)

    Si quelqu'un aurait une solution à mon problème ce serait sympa.

    Merci d'avance

    PS: Si quelqu'un pouvait me dire pourquoi je peux pas remplir un tableau avec les différents résultats dans une case car à chaque fois le résultat se met dans la case 0 ça serait encore plus sympa :)
    • Partager sur Facebook
    • Partager sur Twitter
      23 août 2011 à 11:48:17

      J'adore les forums :) les réponses foisonnent ^^ en tout cas si ça intéresse quelqu'un voici la solution que j'ai fini par trouver :

      function comb(L, t, n ,k, combliste) {
         if(n<k) {
           return "";
         }
         if(k==0) {
          // combliste += "{"+L+"}, ";
      	combliste.push(L);
         } else {
            for(var i=0;i < n-k+1; i++) {
              var L2 = L + t[i];
              if(k>1) L2 += ", ";
              
              var t2 = new Array();
              var j = 0;
              for(var r = i+1 ; r < n ; r++) {
                   t2[j] = t[r]
                   j++;
              }
              comb(L2, t2, j, k-1, combliste);
           }
         }
         return combliste;
      }
      
      comb('', 'abc', 3, 2, []);
      


      Ce qui donnera comme résultat : 'ab', 'ac', 'bc'
      • Partager sur Facebook
      • Partager sur Twitter

      Liste de combinaisons

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown