combinaciones VB

Iniciado por vivachapas, 29 Diciembre 2008, 20:42 PM

0 Miembros y 1 Visitante están viendo este tema.

vivachapas

hola.. tengo un problema con un fuerza bruta...

el tema es asi, tengo 6 letras y necesito ver las combinaciones de todas ellas...
pero no se como hacer a q no se repitan... xq asi el codigo es mucho mas lento :S

x ejemplo asdfgh
con este codigo primero aparece aaaaaa en vez de asdfgh y luego cambiarlas de lugar a x ejemplo asdfhg :S

colocar 2 command button, un timmer con intervalo 0
para hacer funcionar el code presionar el segundo command :P
Código (vb) [Seleccionar]
Dim cont As Byte
Dim Letras As String
Dim Letra() As String
Dim a As Byte, b As Byte, c As Byte, d As Byte, e As Byte, f As Byte
Dim La As String, Lb As String, Lc As String, Ld As String, Le As String, Lf As String

Private Sub Command1_Click()
Letras = ""

Do While Text1.Text <> ""
Letras = Letras & Left(Text1.Text, 1) & "|"
Text1.Text = Right(Text1.Text, Len(Text1.Text) - 1)
Loop

Letra = Split(Letras, "|")

For a = 0 To 5
   La = Letra(a)
    For b = 1 To 5
        Lb = Letra(b)
        For c = 2 To 5
            Lc = Letra(c)
            For d = 3 To 5
               Ld = Letra(d)
                For e = 4 To 5
                    Le = Letra(e)
                    For f = 5 To 5
                       Lf = Letra(f)
                        SendKeys La & Lb & Lc & Ld & Le & Lf
                        SendKeys "{Enter}"
                        DoEvents
                    Next f
                Next e
            Next d
        Next c
    Next b
Next a

MsgBox "Termino"

End Sub

Private Sub Command2_Click()
Timer1.Interval = 1000
End Sub

Private Sub Timer1_Timer()
If cont = 3 Then
Call Command1_Click
Timer1.Interval = 0
cont = 0
Else
cont = cont + 1
End If
End Sub

seba123neo

Hola, proba esto:

Código (vb) [Seleccionar]
Option Explicit

Private Sub Combinaciones(Palabra As String, Optional strFixed As String)
    Dim i As Integer
    If Len(Palabra) <> 1 Then
        For i = 1 To Len(Palabra)
            Combinaciones Left$(Palabra, i - 1) & Mid$(Palabra, i + 1), strFixed & Mid$(Palabra, i, 1)
        Next i
    Else
        List1.AddItem strFixed & Palabra
    End If
End Sub

Private Sub Form_Load()
    Me.AutoRedraw = True
    Call Combinaciones("123")
End Sub


saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

vivachapas

jjaa gracias x el ejemplo! funciona de 10 asi tal cual lo pasaste ;)

yo pasaba a postear una solucion tb... pero es mas lammer xD
de todos modos la dejo x si les interesa =P

Código (vb) [Seleccionar]
Private Sub Command1_Click()
Dim a As Byte
Dim b As Byte
Dim c As Byte
Dim d As Byte

Text1.Text = ""

For a = 1 To 4
    For b = 1 To 4
        For c = 1 To 4
            For d = 1 To 4
                If a = b Or a = c Or a = d Or b = c Or b = d Or c = d Then
                Else
                Text1.Text = Text1.Text & a & b & c & d & vbCrLf
                End If
            Next d
        Next c
    Next b
Next a
End Sub

Spider-Net

No quieres que las letras se repitan? Pues será un programa poco eficiente no? porque si mi contraseña es por ejemplo: caucaso que lleva 2 "a" y 2 "c" no sé como la vas a hallar.
Lo más lógico es que las letras se repitan, sobre todo las vocales...

Un saludo.

vivachapas

si pero no es para sacar contraseñas... sino para hacer juegos de palabras