sur le principe de mon code ci-joint, je voudrais faire permuter des groupes de caractères pas forcément de même longueurs du genre : "200~158~75~25" où les tildes séparent chaque groupes pour faire des suites du genre : 25~158~75~200, 158~25~75~200, 75~158~25~200, 200~158~75~25, etc...
Code : Tout sélectionner
BASE_PERM$="1234" ;Régler la bases des Permutations
Debug "Permutations possibles de : " + BASE_PERM$
Dim COMPTEUR_PERM.l(Len(BASE_PERM$)+1)
While BASE_PERM$>""
; MessageRequester("",BASE_PERM$)
PERM$ = BASE_PERM$
BASE$ = Left(BASE_PERM$,1) +"~"
For i = 2 To Len(BASE_PERM$) - 1
BASE$ + Mid(BASE_PERM$,i,1)+"~"
Next i
BASE$ + Right(BASE_PERM$,1)
Debug BASE$
Gosub PERMUTATION
Wend
End
;========== la Routine ==========
PERMUTATION:
If POS_PERM.l=0
COMPTEUR_PERM.l=0
QUEUE_PERM$=""
LONG_PERM.l = Len(BASE_PERM$)
EndIf
POS_PERM.l = 1
NIVEAU_PERMUT:
If COMPTEUR_PERM.l(POS_PERM.l)>=POS_PERM.l
PERM_P.l = POS_PERM.l+1
While Asc(QUEUE_PERM$)<PERM_P.l And QUEUE_PERM$>""
POS_PERM.l = Asc(QUEUE_PERM$)
QUEUE_PERM$ = Right(QUEUE_PERM$,Len(QUEUE_PERM$)-1)
Gosub CHANGE_PERMUT
Wend
POS_PERM.l = PERM_P.l
While PERM_P.l
PERM_P.l = PERM_P.l-1
COMPTEUR_PERM.l(PERM_P.l) = 0
Wend
If POS_PERM.l<LONG_PERM.l
Goto NIVEAU_PERMUT
EndIf
BASE_PERM$=""
POS_PERM.l=0
Return
EndIf
Gosub CHANGE_PERMUT
QUEUE_PERM$ = Chr(POS_PERM.l)+QUEUE_PERM$
COMPTEUR_PERM.l(POS_PERM.l) = COMPTEUR_PERM.l(POS_PERM.l)+1
Return
CHANGE_PERMUT:
BASE_PERM$ = Mid(BASE_PERM$,POS_PERM.l+1,1)+Left(BASE_PERM$,POS_PERM.l)+Right(BASE_PERM$,Len(BASE_PERM$)-(POS_PERM.l+1))
Return