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

Langage PHP Discussion :

[Tableaux] toute combinaison de lettres possible [Fait]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2006
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 6
    Points : 7
    Points
    7
    Par défaut [Tableaux] toute combinaison de lettres possible
    Bonjour ,
    j'ai une liste de lettre, et j'aimerai generer toute les combinaisons possible de cette liste de lettre.

    J'ai fait un script, qui ne fonctionne pas totalement, il donne des combinaison, mais ce n'est pas le resultat esperer.
    Je vous laisse mon code, si vous pouviez m'aidé se serai vraiment gentil :

    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
     
    <?
    $nb   = 67; //nombre de lettre
    $mot = "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789_$&#@";
     
     
    $n1 = 0;
    $n2 = 0;
    $n3 = 0;
    $n4 = 0;
    $n5 = 0;
     
     
    function lettre($mot,$num)
    {
      $lettre = substr($mot, $num, 1);
      return $lettre;
    }
     
    $change = 1;
    $bool = true;
    while($bool)
    {
     
      if ($n1 <$nb)
      {
        $sum = 1;
     
        $l1 = lettre($mot,$n1); // lettre 1 etcc...
        $l2 = lettre($mot,$n2); 
        $l3 = lettre($mot,$n3);
        $l4 = lettre($mot,$n4);
        $l5 = lettre($mot,$n5);
     
          echo '['.$l1.' '.$l2.' '.$l3.' '.$l4.' '.$l5.']<br>';
      }
      if($change ==1)
      {
        $n1++;
        $change =2;
     
      }
      else if($change ==2)
      {
        $n2++;
        $change =3;
      }
     
      else if($change ==3)
      {
        $n3++;
        $change =4;
      }
      else if($change ==4)
      {
        $n4++;
        $change =5;
      }
     
      else
      {
        $n5++;
        $change =1;
      }
      if($n1 == $nb)
        break;
    }
      echo "<br>";

  2. #2
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Je ne saurais exactement comment résoudre ton probleme
    mais j'ai fais un truc a l'université qui y ressemblait

    En fait on avait une table de jeu de 8 lettres par 8 lettres placé au hasard
    Il fallait résoudre la table de jeu en trouvant toute les possibilité de mots de lettres se touchant

    On avait réussis avec une fonction récursive

    Je crois que ca serait ce que tu devrais faire, fixe bien tes conditions de sorties pour ne pas etre dans une boucle sans fin

    je crois que le mieux serait de prendre tout ta chaine de lettre et la mettre dans un tableau indexé, ca travaillerais déjà mieux
    ensuite tu joues avec les index et place les combinaison dans un autre tableau, à chaque nouvelle combinaison tu vérifies si elle y est déjà inscrite, si oui, tu passe sinon tu l'ajoutes
    rapidement je pense aux fonctions suivantes:
    str_split()
    in_array()
    array_push()

    bonne succès
    La perfection n'est pas un but, l'amélioration constante devrait l'être!
    La position des Développeurs de developpez avec les explications

  3. #3
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    y a t il une longueur précise de la chaine à générer ?

    Car avec autant de caracteres tu risque avoir un code au temps d'exécution extremement long
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  4. #4
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212

  5. #5
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu es conscient du nombre de combinaisons possibles de 5 lettres parmi 67 ? 67^5 = 1.350.125.107. Sympa !

    Tu peux faire 5 boucles imbriquées ou une fonction récursive qui prend en paramètre un "niveau" et qui ne dépasse pas le niveau 5.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    30
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 30
    Points : 22
    Points
    22
    Par défaut
    up du post avec cette petite fonction
    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
     
    function anagramme($str, $tete="")
    {
    	if(strlen($str) == 1)
    	{
    		echo $tete . $str . '<br />' ;
    	}
    	else
    	{
    		for($i = 1; $i <= strlen($str); $i++)
    		{
    			anagramme(substr($str, 1, strlen($str) - 1), $tete . $str{0}) ;
    			$str = substr($str, 1, strlen($str) - 1) . $str{0} ;
    		}
    	}
    }
     
    anagramme('abc') ;
    maintenant je vais dans le sens de _Mac_ : ça commence à durer un peu à partir de 7-8 lettres

Discussions similaires

  1. Réponses: 13
    Dernier message: 08/05/2014, 15h44
  2. Réponses: 4
    Dernier message: 14/03/2014, 18h03
  3. Réponses: 0
    Dernier message: 04/02/2013, 13h03
  4. Parcourir des tableaux, toutes combinaisons possibles ?
    Par seb92500 dans le forum Langage
    Réponses: 9
    Dernier message: 20/11/2008, 17h11

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