Bonjour,
Je recherche comment faire ceci en PHP :
soit ceci :(a+b+c)*(p+g+r+s)*(m+n+o)*(a+b+c)*(t+u+v)*(d+e+f) = apmatd+apmate+apmatf+apmaud+....
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.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}
une personne du forum m'a proposé un algo, mais j'ai du mal à la comprendre pour le transcrire en PHP :
Auriez vous des idées de solutions ?
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
Merci d'avance
Cordialement
Arnaud
Partager