| 
	
		|  Autor | Tema: [RETO] ¿Fácil? Buscando los números de Lychrel  (Leído 15,501 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 BooleanDim 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 BooleanDim 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 LongDo
 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 = TrueEnd 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 = TrueEnd Function  
 Version 3.  Public Function IsLychrelNumberBlackZeroX03(ByVal InVal As Double, ByRef OutValEnd As Double, Optional InMaxVueltas As Long = 20) As BooleanDim 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 = TrueEnd 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 | 9,104 |  31 Enero 2011, 18:30 pm por Karcrack
 |  
						|   |   | Sacar numeros de una ecuacion? reto?
							« 1 2 » Programación Visual Basic
 | Edu | 12 | 5,993 |  14 Marzo 2011, 16:58 pm por 79137913
 |  
						|   |   | Reto relativamente fácil
							« 1 2 » Desafíos - Wargames
 | ace332 | 15 | 12,426 |  23 Enero 2012, 19:46 pm por Caster
 |  
						|   |   | Reto KeygenMe #2 [Facil] Ingeniería Inversa
 | jEUDi17 | 7 | 5,287 |  28 Agosto 2012, 23:29 pm por Flamer
 |  
						|   |   | Reto SQLi -1-[fácil] Desafíos - Wargames
 | elh4ck3r | 3 | 4,741 |  20 Julio 2018, 22:14 pm por engel lex
 |    |