Pattern / Combinations

P

Paul W Smith

Does anyone know of any algorithms which produce all the possible
combinations of patterns within a string?

Example String = ABCDE

AB, AC, AD, AE, BC, BD, BE, CD, CE, DE
ABC, ABD, ABE, ACD, ACE, ADE, BCD, BCE, CDE
ABCD, ABCE, ABDE, ACDE, BDCE
ABCDE
 
A

Andrew Taylor

A simple recursive approach seems to work quite well (though
it doesn't give them in alphabetical order):

Option Explicit
Sub main()
ShowCombinations "", "ABCDE"
End Sub

Sub ShowCombinations(strPrefix As String, strMain As String)
If strMain = "" Then
Debug.Print strPrefix
Exit Sub
End If
Dim strFirst As String, strRest As String
strFirst = Left(strMain, 1)
strRest = Mid(strMain, 2)
ShowCombinations strPrefix & strFirst, strRest
ShowCombinations strPrefix, strRest
End Sub
 
G

Guest

Very Nice!

--
Regards,
Tom Ogilvy


Andrew Taylor said:
A simple recursive approach seems to work quite well (though
it doesn't give them in alphabetical order):

Option Explicit
Sub main()
ShowCombinations "", "ABCDE"
End Sub

Sub ShowCombinations(strPrefix As String, strMain As String)
If strMain = "" Then
Debug.Print strPrefix
Exit Sub
End If
Dim strFirst As String, strRest As String
strFirst = Left(strMain, 1)
strRest = Mid(strMain, 2)
ShowCombinations strPrefix & strFirst, strRest
ShowCombinations strPrefix, strRest
End Sub
 
P

Paul W Smith

Thank you for this example which is so close to what I require - order is
unimportant.

However how do I amend your code so it only produces doubles and above, no
singles

PWS
 
P

Paul W Smith

The answer to my question came to me as soon as I posted my request - check
that the length of StrPrefix > 1.
 
D

Dana DeLouis

Very Nice!
I like it also. In other math programs, this is known as "BinarySubsets."
This implementation gives it in reverse order. With 5 items, it goes from
2^5-1 to 1 in Binary form. Other programs use this idea for implementation.
First number is 31, or 11111 in binary, (abcde)
Second number is 30, or 11110 (abcd)
29, 11101 (abce)
etc...
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top