Autor
|
Tema: [RETO] ¿Fácil? Buscando los números de Lychrel (Leído 13,723 veces)
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
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 Public Function IsLychrelNumberDanger(ByVal numero As Double, ByRef numeroFinal As Double, ByRef actualit As Integer, Optional ByVal maxVueltas As Long = 60) As Boolean actualit = actualit + 1 Dim original As String original = CStr(numero) Dim reverse As String reverse = StrReverse(original) If original = reverse Then IsLychrelNumberDanger = False End If If actualit = maxVueltas Then IsLychrelNumberDanger = True End If numeroFinal = CDbl(reverse) + numero IsLychrelNumberDanger = IsLychrelNumberDanger(numeroFinal, numeroFinal, actualit, maxVueltas) End Function
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
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Ahora entiendo por que decías que no servía cuando lo pasabas de VB.NET a VB6 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 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
Mensajes: 2.633
La sonrisa es la mejor forma de afrontar las cosas
|
jajaja las validaciones las agregue al final 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 )
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Colaborador
Desconectado
Mensajes: 10.683
Yo que tu lo pienso dos veces
|
Eso es porque necesita una excusa para poder agregar una parámetro más a la función, el que usa para la recursividad 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
Mensajes: 140
|
Buen día, gente. Aquí les dejo mi aporte: 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
Mensajes: 140
|
Aquí les dejo otra versión que según yo es más rápida. 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
Mensajes: 2.416
Se siente observado ¬¬'
|
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 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
Mensajes: 3.158
I'Love...!¡.
|
Despues de que se me trabo la inche PC reice mi codigo aqui esta!¡. Public Function IsLychrelNumberBlackZeroX(ByVal InVal As Double, ByRef OutValEnd As Double, Optional InMaxVueltas As Long = 20) As Boolean If InVal And &H80000000 Then Exit Function OutValEnd = InVal Do Until OutValEnd > 9 OutValEnd = OutValEnd + OutValEnd InMaxVueltas = InMaxVueltas - 1 Loop Do Until InMaxVueltas < 1 'Or IsLychrelNumberBlackZeroX = True InVal = StrReverse(OutValEnd) + 0 IsLychrelNumberBlackZeroX = InVal - OutValEnd = 0 If IsLychrelNumberBlackZeroX Then Exit Do OutValEnd = OutValEnd + InVal InMaxVueltas = InMaxVueltas - 1 Loop IsLychrelNumberBlackZeroX = True End Function
Ducles Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
Psyke1
Wiki
Desconectado
Mensajes: 1.089
|
InVal = StrReverse(OutValEnd) + 0
Le sumas cero por algo en particular?¿ DoEvents¡!
|
|
|
En línea
|
|
|
|
BlackZeroX
Wiki
Desconectado
Mensajes: 3.158
I'Love...!¡.
|
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. Public Function IsLychrelNumberBlackZeroX02(ByVal InVal As Double, ByRef OutValEnd As Double, Optional InMaxVueltas As Long = 20) As Boolean If InVal And &H80000000 Then Exit Function OutValEnd = InVal Do Until OutValEnd > 9 OutValEnd = OutValEnd + OutValEnd InMaxVueltas = InMaxVueltas - 1 Loop Do Until InMaxVueltas < 1 'Or IsLychrelNumberBlackZeroX = True InVal = StrReverse(OutValEnd) + 0 If InVal - OutValEnd = 0 Then Exit Do OutValEnd = OutValEnd + InVal InMaxVueltas = InMaxVueltas - 1 Loop IsLychrelNumberBlackZeroX02 = True End Function
Version 3. Public Function IsLychrelNumberBlackZeroX03(ByVal InVal As Double, ByRef OutValEnd As Double, Optional InMaxVueltas As Long = 20) As Boolean Dim tmp As Double If InVal And &H80000000 Then Exit Function OutValEnd = InVal Do Until OutValEnd > 9 OutValEnd = OutValEnd + OutValEnd InMaxVueltas = InMaxVueltas - 1 Loop Do Until InMaxVueltas < 1 tmp = OutValEnd: InVal = 0 Do InVal = (InVal * 10) + (tmp Mod 10) tmp = tmp \ 10 Loop While tmp > 0 If InVal - OutValEnd = 0 Then Exit Do OutValEnd = OutValEnd + InVal InMaxVueltas = InMaxVueltas - 1 Loop IsLychrelNumberBlackZeroX03 = True End Function
Dulces Lunas!¡.
|
|
|
En línea
|
The Dark Shadow is my passion.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[RETO+Python] Buscando rangos
« 1 2 »
Scripting
|
Novlucker
|
13
|
8,194
|
31 Enero 2011, 18:30 pm
por Karcrack
|
|
|
Sacar numeros de una ecuacion? reto?
« 1 2 »
Programación Visual Basic
|
Edu
|
12
|
5,354
|
14 Marzo 2011, 16:58 pm
por 79137913
|
|
|
Reto relativamente fácil
« 1 2 »
Desafíos - Wargames
|
ace332
|
15
|
11,365
|
23 Enero 2012, 19:46 pm
por Caster
|
|
|
Reto KeygenMe #2 [Facil]
Ingeniería Inversa
|
jEUDi17
|
7
|
4,687
|
28 Agosto 2012, 23:29 pm
por Flamer
|
|
|
Reto SQLi -1-[fácil]
Desafíos - Wargames
|
elh4ck3r
|
3
|
3,815
|
20 Julio 2018, 22:14 pm
por engel lex
|
|