Tout à faitSpock a écrit :mon code lui fonctionnera pour n'importe quelle longueur !!

Mais je ne resterais pas sur une défaite.
Code : Tout sélectionner
;Désactiver le support unicode dans les options de compilation
Procedure.s SetPermutation(Pattern.s, n)
Protected i, Factorial = 1, Temp
For i = 2 To Len(Pattern)
Factorial * (i - 1)
Temp = PeekB(@Pattern + (i - ((n / Factorial) % i) - 1))
PokeB(@Pattern + (i - ((n / Factorial) % i) - 1), PeekB(@Pattern + i - 1))
PokeB(@Pattern + i - 1, Temp)
Next
ProcedureReturn Pattern
EndProcedure
Procedure GetCombination(Groupe.s)
Protected i,j
Protected Pattern.s ;Composer d'une séquence de chiffres (Exemple : 1234)
Protected Permutation.s ;Permutation retournée par la procédure SetPermutation. Exemple (2413)
Protected Result.s ;Résultat à afficher
;Compter le nombre de groupe
For i = 1 To CountString(Groupe, "~") + 1
Pattern + Chr(64 + i) ;La lettre A commence à 65
Next
;Générer les permutations pour la pattern
i=1
Repeat
Result = ""
Permutation = SetPermutation(Pattern, i)
;Construire le nouveau groupe en fonction de la pattern obtenue
For j = 1 To Len(Permutation)
Result + StringField(Groupe, Asc(Mid(Permutation,j,1)) - 64, "~")+"~"
Next
;Afficher le résultat
Debug LSet(Result, Len(Result) - 1)
;Permutation suivante
i + 1
Until Permutation = Pattern
EndProcedure
;Donne les combinaison de ce groupe
GetCombination("158~200~25~75")
