Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Dreamaker en 8 Agosto 2010, 03:16 am



Título: [Ayuda] Necesito saber como resolver este problema
Publicado por: Dreamaker en 8 Agosto 2010, 03:16 am
Hola chicos, tengo un problema y no tengo ni idea de como hacerlo, los molesto porque quiero saber si alguien me puede ayudar a resolverlo simplemente para aprenderlo, porque es un tema que me tomarán en una examen (no me tomarán el enunciado, sí la metodología)

Bueno ahí vamos: 
   Con las cifras del año 2010, un usuario armó una contraseña. Averiguar esa contraseña sabiendo que es un número de cuatro dígitos (lo que da un total de 128 posibilidades), divisible por 11 donde, la suma de sus dígitos es igual a 2. Se deberán utilizar Funciones y Procedimientos para los diferentes procesos de cálculo y búsqueda del resultado.

Aclaro no es tarea, sino que simplemente estuve un buen rato tratando de resolver y no sé como coño puedo hacerlo, si alguien me puede dejar la resolución con un código no muy difícil de entender, sino simple

Gracias! ;)

PD: Lo que sí se es que hay que usar vectores, e ir swapeando (intercambiando) los valores del mismo hasta que se cumplan las condiciones pero no me sale hacerlo. Si pueden no poner códigos en inglés como he visto por allí, mejor ;D


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: rob1104 en 8 Agosto 2010, 04:17 am
Si puedes poner tus intentos y de ahí irlos corrigiendo mejor.

Saludos


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: Dreamaker en 8 Agosto 2010, 04:25 am
Es que osea estuve tratando lo que dije, ir swapeando pero no me sale que swapee todas las veces que sean necesarias hasta que llegue a la condición a cumplir y muestre el número correspondiente :-\


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: BlackZeroX en 8 Agosto 2010, 23:07 pm
usa el buscador, publique un codigo de combinaciones hace ya tiempo.

P.D.: Me suena a tarea!¡.

Dulces Lunas!¡.


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: hunter18 en 9 Agosto 2010, 05:29 am
No importa si es tarea o para examen,si alguien del foro soluciona esa pregunta me saco el sombrero :-(, nunca pude resolver ese tipo de pregunta y los profesores nunca dieron la solucion, "por que sera", siempre me quedo la duda si era joda lo que dejaban


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: Angeldj27 en 9 Agosto 2010, 14:44 pm
Creo que sebaneo postio algo de combinaciones no hace mucho tiempo solo busca la combinacion y los comparas en todo caso hasta te sale con if anidado eso creo..  :P solo es inmaginacion y busqueda


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: rob1104 en 9 Agosto 2010, 20:28 pm
Yo no lo veo tan dificil, la unica cifra que cumple con esas caracteristicas es 1001, y se puede sacar con un par de ciclos for sin problema.

Saludos


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: Dessa en 9 Agosto 2010, 21:30 pm
la unica cifra que cumple con esas caracteristicas es 1001

tengo una duda, 1100 no ?


























Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: BlackZeroX en 10 Agosto 2010, 01:21 am
y 0011?, y 0110?, etc...


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: Dessa en 10 Agosto 2010, 01:27 am
No sé, en mi criterio en la pregunta dice un número de 4 cifras, no contariá los ceros por delante, esa es mi duda, sino seria un strng con 4 numeros.

 


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: BlackZeroX en 10 Agosto 2010, 02:32 am
jeje es un numero aqui y en china (los 0 solo son relleno, pero aun asi es un NUMERO)!¡.


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: Dessa en 10 Agosto 2010, 03:18 am
Para el caso seria lo mismo, eso elevaria las posibilidades a 4 números (corrijanme si me equivoco), los 4 son divisibles por 11, tambien los 4 numeros son de 4 cifras  y tambien la suma de las cifras de esos 4 números es 2, por lo tanto, Dreamaker, la forma de averiguar el password de ese usuario es el "ophcrack"  :D









Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: EddyW en 10 Agosto 2010, 03:38 am
Te respondí en CPH :P

Aunque no creo que esté correcto pero como voy a mencionar más adelante, no entendí como lo planteas :P
Copy And Paste: :D

Me entretuve un rato, no se si entendí bien lo que planteas:
Me salió esto:
Código
  1. Private Sub Command1_Click()
  2. Dim Bit() As String, A As Integer, B As Integer, C As Integer, D As Integer, E As Integer
  3. Dim Total As String, Div11 As Long, SumaDig As Long
  4.  
  5. Bit = Split(StrConv("2010", vbUnicode), Chr(0))
  6. For A = 0 To 1
  7. For B = 0 To 1
  8. For C = 2 To 3
  9. For D = 2 To 3
  10.    Total = Bit(A) & Bit(B) & Bit(C) & Bit(D)
  11.    Div11 = Total / 11
  12.    SumaDig = 0
  13.    For E = 1 To Len(Div11)
  14.        SumaDig = SumaDig + Val(Mid(Val(Div11), E, 1))
  15.    Next
  16.    ' Suma de digitos igual a 2
  17.    If SumaDig = 2 Then
  18.        List1.AddItem "Gen:> " & Total & " -Div11>" & Div11 & " -Suma>" & SumaDig
  19.    End If
  20.    DoEvents
  21. Next: Next: Next: Next
  22. MsgBox List1.ListCount
  23. End Sub

Como que no me cuadra, podrías mencionar el sitio de donde sacaste el ejercicio ;)

SaluDOS!!!


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: Dreamaker en 10 Agosto 2010, 05:29 am
Bueno paso a aclararle las dudas a los que les interesó, es formar un una contraseña sabiendo que es un número de 4 dígitos formado por las cifras del año 2010 por lo cual queda sobreentendido que como bien dijeron algunos no podrá empezar con "0012" o "0021" o similares sino con "1 o 2" para que tenga 4 dígitos, ya que a "01" se considera su parte entera como "1"

Vuelvo a aclarar que no es ninguna tarea para los que pensaron así (y sino vean mi trayectoria en el foro) y que es más, voy a revisar los códigos por ahí y tratar de hacerlo nuevamente, y cuando lo tenga hecho dejaré la solución para todos, si alguien lo consigue hacer y quiere dejar la solución para que lo vean los demás puede hacerlo que de seguro a más de uno le servirá y no sólo a mi ya que lo voy a hacer igual ;D


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: EddyW en 10 Agosto 2010, 05:42 am
Bueno, ahora no estoy como para hacer de nuevo el code, creo que es como lo puse solo que hay que corregir los for por:

Código
  1. For A = 0 To 3
  2. For B = 0 To 3
  3. For C = 0 To 3
  4. For D = 0 To 3

Eso genera 256 posibilidades, en realidad 128 como dice el ejercicio, pero fallé en algo por eso aparecen repetidas 2 veces..
Si analizas el code verás como funca ;)

SaluDOS!!!


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: Dessa en 10 Agosto 2010, 06:02 am
Para mi hay 2 resultados

Código:

Private Sub Form_Load()

Dim x As Variant
Dim m As Double
Dim i As Byte
Dim suma As Byte


For x = 1000 To 2000
  If InStr(1, x, "0") > 0 Or InStr(1, x, "1") > 0 Or InStr(1, x, "2") > 0 Then
    m = x Mod 11
    If m = 0 Then
      suma = 0
      For i = 1 To Len(x)
        suma = suma + Mid(x, i, 1)
      Next
      If suma = 2 Then MsgBox x
   End If
  End If
Next

End Sub






Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: BlackZeroX en 10 Agosto 2010, 06:23 am
para mi hay 4

Código
  1.  
  2. Option Explicit
  3.  
  4. Private Sub Form_Load()
  5. Dim ThisNumberNow       As Integer
  6. Dim StrNumber           As String * 4
  7. Dim IndexString         As Byte
  8. Dim Suma                As Byte
  9.  
  10.    For ThisNumberNow = 1 To 9999
  11.        If ThisNumberNow Mod 11 = 0 Then
  12.            StrNumber = Format(ThisNumberNow, "0000")
  13.            Suma = 0
  14.            For IndexString = 1 To Len(StrNumber)
  15.                Suma = Suma + Val(Mid(StrNumber, IndexString, 1))
  16.            Next
  17.            If Suma = 2 Then MsgBox StrNumber
  18.        End If
  19.    Next
  20.  
  21. End Sub
  22.  
  23.  

Cumple TODOS los criterios ( Jamas se dice que no puede estar compuesto por 0 antes xD )

P.D.: Tarea en Proceso xP.

Dulces Lunas!¡.

Ducles Lunas!¡.


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: Dessa en 10 Agosto 2010, 06:37 am

Bueno paso a aclararle las dudas a los que les interesó, es formar un una contraseña sabiendo que es un número de 4 dígitos formado por las cifras del año 2010 por lo cual queda sobreentendido que como bien dijeron algunos no podrá empezar con "0012" o "0021" o similares sino con "1 o 2" para que tenga 4 dígitos, ya que a "01" se considera su parte entera como "1"


Si, lo aclaró nuevamente, pero para el caso es lo mismo,  un ejercicio para determinar un passwod tendria que tener un resultado solo , no ?

 


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: rob1104 en 10 Agosto 2010, 08:12 am
A mi solo me da una opcion posible, ¿se me estará pasando algo?
Código
  1. Private Sub Form_Load()
  2.    Dim Div As Integer
  3.    Dim Num As String
  4.    Dim Suma As String
  5.    Dim Bucle1 As Integer
  6.    Dim Bucle2 As Integer
  7.  
  8.    Suma = ""
  9.    Div = 2010 \ 11     'cant. de num divisibles por 11
  10.    For Bucle1 = 1 To Div
  11.        Num = 11 * Bucle1
  12.        If Num > 999 Then   'preguntamos si es de 4 cifras
  13.            For Bucle2 = 1 To Len(Num)
  14.                Suma = Val(Suma) + Val(Mid(Num, Bucle2, 1)) 'suma de sus digitos
  15.                If Suma = 2 Then
  16.                    MsgBox Num
  17.                End If
  18.            Next
  19.        End If
  20.    Next
  21. End Sub


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: 79137913 en 10 Agosto 2010, 17:20 pm
HOLA!!!!


Yo lo hice con la funcion "mod" que devuelve el resto de la division:

Código
  1.  
  2. For PASS = 1000 To 2222
  3. If PASS Mod 11 = 0 Then 'SE FIJA QUE DIVISIONES DE PASS/11 DAN RESTO 0
  4. If Val(Mid(PASS, 1, 1)) + Val(Mid(PASS, 2, 1)) + Val(Mid(PASS, 3, 1)) + Val(Mid(PASS, 1, 1)) = 2 Then ' SE FIJA SI LA SUMA DE LAS CIFRAS DA 2
  5. MsgBox "LA CONTRASEÑA ES " & PASS ' DEVUELVE LA CONTRASEÑA
  6. End If
  7. End If
  8. Next
  9.  


Título: Re: [Ayuda] Necesito saber como resolver este problema
Publicado por: Karcrack en 10 Agosto 2010, 19:56 pm
Segun estas condiciones:
  • 4 cifras (Quitando los ceros a la izquierda)
  • Sus cifras suman 2
  • Formado con 2,1,0
  • Multiple de 11
El resultado seria este:
Código:
1001 
1100

Algoritmo:
Código
  1. Private Sub Form_Load()
  2.    Dim i       As Long
  3.  
  4.    For i = 0 To 111
  5.        If SumDigits(1001 + i * 11) = 2 Then Debug.Print 1001 + i * 11
  6.    Next i
  7. End Sub
  8.  
  9. Public Function SumDigits(ByVal lNumb As Long) As Long
  10.    Dim bvTmp() As Byte
  11.    Dim i       As Long
  12.  
  13.    bvTmp = StrConv(Trim$(Str$(lNumb)), vbFromUnicode)
  14.  
  15.    For i = LBound(bvTmp) To UBound(bvTmp)
  16.        SumDigits = SumDigits + (bvTmp(i) - vbKey0)
  17.    Next i
  18. End Function