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 :

Faire toute les possibilités entre "abc" et "def"


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut Faire toute les possibilités entre "abc" et "def"
    Bonjour,

    Je recherche comment faire ceci en PHP :

    (a+b+c)*(p+g+r+s)*(m+n+o)*(a+b+c)*(t+u+v)*(d+e+f) = apmatd+apmate+apmatf+apmaud+....
    soit ceci :

    Le principe c'est de faire les "multiplications" les unes après les autres:

    L = {a,b,c}
    L = L*{p,g,r,s}
    L = L*{m,n,o}
    ...

    A chaque étape, on "multiplie" la liste existante avec le nouveau paquet de lettres. Ça revient a dupliquer la liste existante et ajouter une lettre au bout de chaque élément de la liste:

    L={a,b,c}
    L*{p,g,r,s} = {L*p , L*g, L*r, L*s }

    avec:
    L*p= {a,b,c}*p = {ap,bp,cp}
    L*g= {a,b,c}*g = {ag,bg,cg}
    ...

    d'où:
    L*{p,g,r,s} = {ap,bp,cp,ag,bg,cg,ar,br,cr,as,bs,cs}
    Vous me direz, fais des boucles imbriqué. Ok, mais je ne connais pas la profondeur de champ. je peux avoir 2 groupe de caractères comme 5 groupes.

    une personne du forum m'a proposé un algo, mais j'ai du mal à la comprendre pour le transcrire en PHP :

    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
     // LettersCount: nombre total de lettre du mot
     // Words       : liste des mots à construire
     // CharLists[i]:  liste des caractères possible pour la ième touche tapée.
    // procedure principale 
    Words.Clear() ;
    Words.Add("") ;
    For i=0 to LettersCount-1 do AddCombination(Words,CharLists[i]) ;
     
    // procedure appelée
    procedure AddCombination(Words ,CharList)
    For j=1 To CharList.Count-1 
         do for k=0 To Words.Count-1 do 
              Words.Add(Words.Add(Words[k]+Charlist[j]) ;
    for k=0 To Words.Count-1 do 
         Words[k]=Words[k]+CharList[0]) ;
    return
    Auriez vous des idées de solutions ?
    Merci d'avance

    Cordialement

    Arnaud

  2. #2
    Membre chevronné Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Par défaut
    Bonjour,

    Tu n'avais pas un problème de chaines issues de saisies de clavier de portable tout à l'heure ?

    Tu as changé la discussion ?

    Gillou

  3. #3
    Membre chevronné Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Par défaut
    pardon. tu as juste reformulé.
    voila une solution

    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
    <?php
     
    function T9($combinaison) {
    	$touches = array();
    	$touches[1] = array('A', 'B', 'C');
    	$touches[2] = array('D', 'E', 'F');
    	$touches[3] = array('G', 'H', 'I');
    	$touches[4] = array('J', 'K', 'L');
    	$touches[5] = array('M', 'N', 'O');
    	$touches[6] = array('P', 'Q', 'R');
    	$touches[7] = array('S', 'T', 'U');
    	$touches[8] = array('V', 'W', 'X');
    	$touches[9] = array('Y', 'Z');
     
    	$arr = str_split($combinaison);
    	$possibilites	 = array();
    	$resultats = array('');
    	$array_return = array();
     
    	foreach($arr as $chiffre) 
    		$possibilites[] = $touches[$chiffre];
     
    	for($i = 0; $i < strlen($combinaison) ; $i++) {
    		$t = $resultats;
     
    		foreach($possibilites[$i] as $lettre) {
     
    			foreach ($resultats as $chaine)
    				$t[] = $chaine . $lettre;
    		}
     
    		$resultats = $t;	
    	}
     
    	//filtre (suppression des chaines qui n'ont pas la bonne longueur
    	foreach($resultats as $solution)
    		if (strlen($solution) == strlen($combinaison)) $array_return[] = $solution;
     
    	return($array_return);
    }
     
     
    echo "<pre>";
    print_r(T9('357'));
    echo "</pre>";
     
    ?>

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Décembre 2006
    Messages
    1 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 080
    Par défaut
    C'est exactement ceci que je cherchais à faire !

    Peut tu m'expliquer ton script et ça logique ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Algo pour un pseudo T9 : toute les possibilité de chaine entre abc et def
    Par arnaudperfect dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 04/11/2008, 13h42
  2. [VB6] Toutes les dates entre un interval dans un dynaset
    Par tim69000 dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 10/04/2006, 15h13
  3. [debutant]toutes les valeurs entre cotes ?
    Par goony dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/04/2006, 10h13
  4. [VB6]sortir toutes les dates entre deux dates
    Par AlfiQue dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/02/2006, 19h09
  5. [VB] Calcul de toute les possibilité
    Par Stan Trinity dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/11/2005, 15h31

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