[ayuda] Combinar caracteres

Iniciado por Psyke1, 12 Abril 2010, 21:05 PM

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

Psyke1

Hola amigos, necesito su ayuda :huh:, necesito conbinar todos los caracteres del abecedario de 2 a 6 digitos, algo asi:


aa
ab
ac
ad
...
az
bb
ba
...

Muchas gracias!!! ;D

Shell Root

Cita de: *PsYkE1* en 12 Abril 2010, 21:05 PM...de 2 a 6 digitos,...
Con eso te referis a que empieza desde aa y termina en zzzzzz
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Psyke1


Shell Root

Podrias usar la funcion de mi amigo Og., aunque la podrias modificar así:
Código (php) [Seleccionar]
function muestra($num){
$a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$cont = strlen($a);
$ctp = 0;

while($num != 0){$tmp[$ctp] = $num%$cont; $num -= $tmp[$ctp++]; $num /= $cont;}
while($ctp != 0){echo $a[$tmp[--$ctp]];}
}

for($i=1;$i<300;$i++){
muestra($i);
echo "<br>";
}


Resultado:
B
C
D
E
[..Snip..]
LM
LN
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

Lupin

...mmm no entendi mucho el codigo anterior...¿php?
otra opcion podria ser anidar for de hasta seis niveles...me imagino k esto
consumira harta memoria es algo de 500 millones de combinaciones ufff :-X :-X



Shell Root

En Visual Basic 6.0 sería algo así: (Desde hace mucho raton que no programó en VB, así que obviamente debe tener algun error)

Código (vb) [Seleccionar]
Public Function Muestra(strNumero As String) As String
 Dim strAbecedario As String
 Dim intContador, intctp, intNum As integer
 Dim intTemp(), inta() As Integer


 strAbecedario = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 intContador = Len(strAbecedario)
 intctp = 0

 while intNum <> 0
   intTemp(intctp) = intNum MOD intCont
   intNum -= intTemp(intctp + 1)
   intNum /= intCont
 End While

 While intctp <> 0
   inta(intTemp(intctp - intctp))
 End While
End Function

For inti As integer = 0 to 300
 Muestra(inti)
Next
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

BlackZeroX

Código (Vb) [Seleccionar]

'   //  //  //  //  //  //  //  //  //  //  //  //  //  //  //  //
'   //  Se nesesita solo un ListBoX  =  List1//  //  //  //
'   //  //  //  //  //  //  //  //  //  //  //  //  //  //  //  //
Private Sub Combinaciones(Palabra As String, Optional strFixed As String)
   Dim Recorrer As Integer
   If Len(Palabra) <> 1 Then
       For Recorrer = 1 To Len(Palabra)
           Combinaciones Left$(Palabra, Recorrer - 1) & Mid$(Palabra, Recorrer + 1), strFixed & Mid$(Palabra, Recorrer, 1)
       Next Recorrer
   Else
       List1.AddItem strFixed & Palabra
   End If
End Sub

Código (vb) [Seleccionar]

Private Sub Form_Load()
    List1.visible = false
   Call Combinaciones("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
    List1.visible = true
End Sub


Sangriento Infierno Lunar!¡.
The Dark Shadow is my passion.

Psyke1

Gracias BlackZeroX▓▓▒▒░░  ;D, pero creo q no es lo que necesito:

En vez de:
Código (vb) [Seleccionar]

Call Combinaciones("ABCDEFGHIJKLMNOPQRSTUVWXYZ")

puse:
Código (vb) [Seleccionar]

Call Combinaciones("ABC")

Y obtuve como resultado en el ListBox esto:

ABC
ACB
BAC
BCA
CAB
CBA

Faltan BBA o BCC por ejemplo, ademas, necesito que sea de 2 digitos y con todas las combinaciones... :huh:

Salu2

Karcrack

Antes que nada: ANTES DE 'B' SIEMPRE VA 'M', NO 'N'

Después, tu sabes lo que quieres hacer, así que por que no diseñas tu el algoritmo? Si no dominas todavía la programación supongo que si que podrás hacerlo en tu idioma (castellano), después de tener los pasos necesarios podrás imaginar como se hace programando.

Vas a ver mi comentario como uno que no ayuda, pero date cuenta que si te lo hacen no aprenderás.

Lupin

Mi codigo no es muy eficiente que digamos je je je pero la intencion es la que cuenta
pero creo que puede dar una idea....solo seria para 2 y 3 digitos..para mas digitos
habria que anidar mas for..y no me atrevo pork ya colgue mi maquina  y perdi mi trabajo que no he guardado... :(

CitarPrivate Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Private Sub Form_Load()

Dim abecedario(0 To 26) As String
Dim FileNum As Integer
For x = 1 To 26
abecedario(x) = Chr(96 + x)
Next x

FileNum = FreeFile
Open "C:\abecedario.txt" For Output As FileNum
        For x = 1 To 26 ' con 2 digito
                    For y = 1 To 26
                        letra = letra + Trim(abecedario(y)) + Trim(abecedario(x)) + " "
                    Next y
                    letra = letra + vbCrLf
        Next x
       
       
         
         For x = 1 To 26 ' con 3 digito
                    For y = 1 To 26
                        For w = 1 To 26
                        letra = letra + Trim(abecedario(w)) + Trim(abecedario(y)) + Trim(abecedario(x)) + " "
                        Next w
                    Next y
                    letra = letra + vbCrLf
        Next x
       
        Print #FileNum, letra
        ShellExecute Me.hwnd, "open", "c:\abecedario.txt", "", "", 4
Close FileNum
End Sub