[Webinar] Streamline your web hosting managementRegister Today

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 326
  • Last Modified:

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
0
Carlos_Rodrigues
Asked:
Carlos_Rodrigues
1 Solution
 
GeoffKellCommented:
0
 
deightonCommented:
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
 
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

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now