?
Solved

stopping a number from permutating twice

Posted on 2006-10-23
5
Medium Priority
?
169 Views
Last Modified: 2010-04-30
When I enter a number to be permutated, the program permutates the entered number twice I.E
If I enter the number 898 the program returns 898, 988, 889, 898, 988, 889
 The program works fine when i enter a number like 123 or 1234.
will not work for a number like 1122, 1223 these type of numbers get permutated twice

Here is a copy of the program

Dim CurrentRow
Sub GetString()
    Dim InString As String
    InString = InputBox("Enter text to permute:")
    Range("a:a").ClearContents
    If Len(InString) < 2 Then Exit Sub
    If Len(S) >= 8 Then
        MsgBox "Too many permutations!"
        Exit Sub
    Else
        ActiveSheet.Columns(1).Clear
        CurrentRow = 1
        Call GetPermutation("", InString)
    End If
End Sub

Sub GetPermutation(x As String, y As String)
    Dim i As Integer, j As Integer
    j = Len(y)
    If j < 2 Then
        Cells(CurrentRow, 1) = x & y
        CurrentRow = CurrentRow + 1
    Else
        For i = 1 To j
            Call GetPermutation(x + Mid(y, i, 1), _
            Left(y, i - 1) + Right(y, j - i))
        Next
    End If
0
Comment
Question by:tbell000
  • 2
  • 2
4 Comments
 
LVL 35

Expert Comment

by:Raynard7
ID: 17793298
Hi,

I would just dump everything into a dictionary (include the microsoft scripting runtime library) and if it exists then not repeat it then just go through and output everything in the array

ie

Dim CurrentRow
Sub GetString()
    Dim InString As String
    InString = InputBox("Enter text to permute:")
    Range("a:a").ClearContents
    If Len(InString) < 2 Then Exit Sub
    If Len(S) >= 8 Then
        MsgBox "Too many permutations!"
        Exit Sub
    Else
        ActiveSheet.Columns(1).Clear
        CurrentRow = 1
        Dim n As New Dictionary
        Call GetPermutation("", InString, n)
    End If
End Sub

Sub GetPermutation(x As String, y As String, n As Dictionary)
    Dim i As Integer, j As Integer
    j = Len(y)
    If j < 2 Then
        If n.Exists(x & y) = False Then
            Cells(CurrentRow, 1) = x & y
            CurrentRow = CurrentRow + 1
            n.Add x & y, 1
        End If
    Else
        For i = 1 To j
            Call GetPermutation(x + Mid(y, i, 1), _
            Left(y, i - 1) + Right(y, j - i), n)
        Next
    End If
End Sub
0
 
LVL 35

Accepted Solution

by:
Raynard7 earned 1500 total points
ID: 18024695
My Option is tested and works, those provided by JackOfPh were not exactly on point.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article describes some techniques which will make your VBA or Visual Basic Classic code easier to understand and maintain, whether by you, your replacement, or another Experts-Exchange expert.
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…
Suggested Courses

840 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question