elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [RETO] ¿Fácil? Buscando los números de Lychrel
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] ¿Fácil? Buscando los números de Lychrel  (Leído 12,576 veces)
[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #10 en: 18 Agosto 2010, 17:44 pm »

Ahí se los dejo, n se que tan weno sea eso, porque ni lo probé, no se si funciona en VB6 xD

me avisan xD
Código
  1. Public Function IsLychrelNumberDanger(ByVal numero As Double, ByRef numeroFinal As Double, ByRef actualit As Integer, Optional ByVal maxVueltas As Long = 60) As Boolean
  2.        actualit = actualit + 1
  3.        Dim original As String
  4.        original = CStr(numero)
  5.        Dim reverse As String
  6.        reverse = StrReverse(original)
  7.  
  8.        If original = reverse Then
  9.            IsLychrelNumberDanger = False
  10.        End If
  11.  
  12.        If actualit = maxVueltas Then
  13.            IsLychrelNumberDanger = True
  14.        End If
  15.        numeroFinal = CDbl(reverse) + numero
  16.        IsLychrelNumberDanger = IsLychrelNumberDanger(numeroFinal, numeroFinal, actualit, maxVueltas)
  17. End Function
  18.  
  19.  


Saludos!

PD: Primero y ultimo que hago en VB xD
PD2: gracias a raul por portar el code a vb6 xD


« Última modificación: 18 Agosto 2010, 17:55 pm por [D4N93R] » En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #11 en: 18 Agosto 2010, 17:49 pm »

Ahora entiendo por que decías que no servía cuando lo pasabas de VB.NET a VB6 :xD

El de raul338 es el "más válido", a la próxima le pongo todas las verificaciones esas, yo simplemente las omití porque entendí que los números de prueba iban a ser válidos para la función :P

Saludos


En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #12 en: 18 Agosto 2010, 17:51 pm »

jajaja las validaciones las agregue al final :P

D4N93R propone agregar un parametro con el numero de iteraciones dado para llegar al resultado final, que dicen, lo ponemos? (seria devolver i en mi caso :xD)
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #13 en: 18 Agosto 2010, 17:54 pm »

Eso es porque necesita una excusa para poder agregar una parámetro más a la función, el que usa para la recursividad :xD

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #14 en: 18 Agosto 2010, 20:35 pm »

Buen día, gente. Aquí les dejo mi aporte:

Código:
Private Function EsNumLychrel4(ByVal num As Long, ByRef numeroFinal, Optional ByVal iteraciones As Long = 50) As Boolean
Dim n As Double, snrev As String
    If num And &H80000000 Then Exit Function
    n = num
    Do While iteraciones > 1
        snrev = StrReverse(n)
        If CStr(n) = snrev Then Exit Function
        n = n + CDbl(snrev)
        iteraciones = iteraciones - 1
    Loop
    snrev = StrReverse(n)
    If CStr(n) = snrev Then Exit Function
    EsNumLychrel4 = True
    numeroFinal = n
End Function

Por el momento es todo. Saludos.
En línea

Tokes

Desconectado Desconectado

Mensajes: 140


Ver Perfil
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #15 en: 18 Agosto 2010, 20:51 pm »

Aquí les dejo otra versión que según yo es más rápida.

Código:
Private Function EsNumLychrel5(ByVal num As Long, ByRef numeroFinal, Optional ByVal iteraciones As Long = 50) As Boolean
Dim n As Double, nrev As Double
    If num And &H80000000 Then Exit Function
    n = num
    Do While iteraciones > 1
        nrev = CDbl(StrReverse(n))
        If n = nrev Then Exit Function
        n = n + nrev
        iteraciones = iteraciones - 1
    Loop
    nrev = CDbl(StrReverse(n))
    If n = nrev Then Exit Function
    EsNumLychrel5 = True
    numeroFinal = n
End Function

          ¡Buen día!
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #16 en: 18 Agosto 2010, 20:53 pm »

No me da tiempo a leerme la documentacion ni nada, pero veo que estais dando la vuelta al numero usando cadenas... Esto puede que os ayude a mejorar la velocidad :)

Código:
Public Function lngReverse(ByVal lLong As Long) As Long
    Do
        lngReverse = (lngReverse * 10) + (lLong Mod 10)
        lLong = lLong \ 10
    Loop While lLong > 0
End Function

Saludos ;)
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #17 en: 18 Agosto 2010, 21:15 pm »


Despues de que se me trabo la inche PC reice mi codigo aqui esta!¡.

Código
  1.  
  2. Public Function IsLychrelNumberBlackZeroX(ByVal InVal As Double, ByRef OutValEnd As Double, Optional InMaxVueltas As Long = 20) As Boolean
  3.    If InVal And &H80000000 Then Exit Function
  4.    OutValEnd = InVal
  5.    Do Until OutValEnd > 9
  6.        OutValEnd = OutValEnd + OutValEnd
  7.        InMaxVueltas = InMaxVueltas - 1
  8.    Loop
  9.    Do Until InMaxVueltas < 1 'Or IsLychrelNumberBlackZeroX = True
  10.        InVal = StrReverse(OutValEnd) + 0
  11.        IsLychrelNumberBlackZeroX = InVal - OutValEnd = 0
  12.        If IsLychrelNumberBlackZeroX Then Exit Do
  13.        OutValEnd = OutValEnd + InVal
  14.        InMaxVueltas = InMaxVueltas - 1
  15.    Loop
  16.    IsLychrelNumberBlackZeroX = True
  17. End Function
  18.  
  19.  

Ducles Lunas!¡.
En línea

The Dark Shadow is my passion.
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #18 en: 18 Agosto 2010, 21:32 pm »

Citar
Código
  1. InVal = StrReverse(OutValEnd) + 0
Le sumas cero por algo en particular?¿

DoEvents¡! :P
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] ¿Fácil? Buscando los números de Lychrel
« Respuesta #19 en: 18 Agosto 2010, 21:45 pm »

strreverse devuelve un string yo a ese string le sumo 0 para pasarlo a numero, igual como le hago en C...

aqui lo dejo corregido

Version 2.
Código
  1. Public Function IsLychrelNumberBlackZeroX02(ByVal InVal As Double, ByRef OutValEnd As Double, Optional InMaxVueltas As Long = 20) As Boolean
  2.    If InVal And &H80000000 Then Exit Function
  3.    OutValEnd = InVal
  4.    Do Until OutValEnd > 9
  5.        OutValEnd = OutValEnd + OutValEnd
  6.        InMaxVueltas = InMaxVueltas - 1
  7.    Loop
  8.    Do Until InMaxVueltas < 1 'Or IsLychrelNumberBlackZeroX = True
  9.        InVal = StrReverse(OutValEnd) + 0
  10.        If InVal - OutValEnd = 0 Then Exit Do
  11.        OutValEnd = OutValEnd + InVal
  12.        InMaxVueltas = InMaxVueltas - 1
  13.    Loop
  14.    IsLychrelNumberBlackZeroX02 = True
  15. End Function
  16.  
  17.  

Version 3.
Código
  1.  
  2. Public Function IsLychrelNumberBlackZeroX03(ByVal InVal As Double, ByRef OutValEnd As Double, Optional InMaxVueltas As Long = 20) As Boolean
  3. Dim tmp             As Double
  4.    If InVal And &H80000000 Then Exit Function
  5.    OutValEnd = InVal
  6.    Do Until OutValEnd > 9
  7.        OutValEnd = OutValEnd + OutValEnd
  8.        InMaxVueltas = InMaxVueltas - 1
  9.    Loop
  10.    Do Until InMaxVueltas < 1
  11.        tmp = OutValEnd: InVal = 0
  12.        Do
  13.            InVal = (InVal * 10) + (tmp Mod 10)
  14.            tmp = tmp \ 10
  15.        Loop While tmp > 0
  16.        If InVal - OutValEnd = 0 Then Exit Do
  17.        OutValEnd = OutValEnd + InVal
  18.        InMaxVueltas = InMaxVueltas - 1
  19.    Loop
  20.    IsLychrelNumberBlackZeroX03 = True
  21. End Function
  22.  
  23.  

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: 1 [2] 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[RETO+Python] Buscando rangos « 1 2 »
Scripting
Novlucker 13 7,632 Último mensaje 31 Enero 2011, 18:30 pm
por Karcrack
Sacar numeros de una ecuacion? reto? « 1 2 »
Programación Visual Basic
Edu 12 4,884 Último mensaje 14 Marzo 2011, 16:58 pm
por 79137913
Reto relativamente fácil « 1 2 »
Desafíos - Wargames
ace332 15 10,805 Último mensaje 23 Enero 2012, 19:46 pm
por Caster
Reto KeygenMe #2 [Facil]
Ingeniería Inversa
jEUDi17 7 4,231 Último mensaje 28 Agosto 2012, 23:29 pm
por Flamer
Reto SQLi -1-[fácil]
Desafíos - Wargames
elh4ck3r 3 3,339 Último mensaje 20 Julio 2018, 22:14 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines