Factorial problem.

I have this collection:

A,B,C,D,E

How can i find all possibilities between this collection? I know that 5 factorial=120 (this is the number of possibilities).

A,B,C,D,E
A,B,C,E,D
A,B,D,C,E
...

Can any one show me sme code to implement this.
I want to retrieve a collectionwith all possibilities.

Note: The initial collection can change from 5 to any number of elements.

Thanks

Carlos Rodrigues
Carlos_RodriguesAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
deightonConnect With a Mentor Commented:
Option Explicit

Private Sub Form_Load()

    Dim colX As New Collection
   
    Dim v, c
   
    Combinations "ABCDE", colX

    For Each v In colX
        c = c + 1
        Debug.Print c, v
    Next

End Sub

Private Function Combinations(x As String, col As Collection)

Dim sTest As String
Dim c As Long
Dim colX As Collection
Dim sString

If Len(x) > 1 Then

    For c = 1 To Len(x)

        sTest = Left(x, c - 1) & Mid(x, c + 1)
       
        Set colX = New Collection
       
        Combinations sTest, colX
   
        For Each sString In colX
           
            col.Add Mid(x, c, 1) & sString
           
        Next
       
        Set colX = Nothing
   
    Next

Else

    col.Add x

End If


End Function
0
 
GeoffKellCommented:
0
 
adgCommented:
Here is a non-recursive way:

Option Explicit

Dim colFac As New Collection
Dim DaRest As String

Private Sub Form_Load()
Dim s As Variant
Dim j As Integer, k As Integer

' seed the collection
colFac.Add "AB", "AB"
colFac.Add "BA", "BA"
DaRest = "CDE"

' generate combinations
For j = 1 To Len(DaRest)
    For Each s In colFac
        If Len(s) = j + 1 Then
            colFac.Remove s
            s = s + Mid(DaRest, j, 1)
            colFac.Add s, s
            For k = 1 To j + 1
                s = Right(s, j + 1) + Left(s, 1)
                colFac.Add s, s
            Next k
        End If
        DoEvents ' allows breaking out early
    Next s
Next j

' display results
For Each s In colFac
    List1.AddItem s
Next s

Caption = "Item Count = " + CStr(colFac.Count)
End Sub
0
 
DanRollinsCommented:
Hi Carlos_Rodrigues,
It appears that you have forgotten this question. I will ask Community Support to close it unless you finalize it within 7 days. I will ask a Community Support Moderator to:

    Accept deighton's comment(s) as an answer.
    *** GeoffKell's link is broken

Carlos_Rodrigues, if you think your question was not answered at all or if you need help, just post a new comment here; Community Support will help you.  DO NOT accept this comment as an answer.

EXPERTS: If you disagree with that recommendation, please post an explanatory comment.
==========
DanRollins -- EE database cleanup volunteer
0
 
NetminderCommented:
Per recommendation, force-accepted.

Netminder
CS Moderator
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.