| 
	
		|  Autor | Tema: [RETO] ¿Fácil? Buscando los números de Lychrel  (Leído 15,509 veces) |  
	| 
			| 
					
						| raul338 
								       
								
								 Desconectado 
								Mensajes: 2.633
								
								 
								La sonrisa es la mejor forma de afrontar las cosas
								
								
								
								
								
								     | 
 
Hooola! No sabia si presentar esto como reto o no (?) http://gaussianos.com/la-conjetura-del-196/http://en.wikipedia.org/wiki/Lychrel_number
 
Ahi esta, tienen que hacer una funcion booleana que calcule los numeros capicuas a partir de este, con un numero maximo de vueltas, para calcular si es de Lychrel o no    Ademas de devolver el numero final dado La firma debe ser asi: Public Function IsLychrelNumber(numero As Double, ByRef numeroFinal As Double,Optional maxVueltas As Long = 20) As Boolean 
 Si no se logra dar el numero de vueltas en menos de maxVueltas  se toma como si fuera numero de Lychrel (aunque el numero este en la vuelta 21   )NOTA:  Cabe aclarar que debe devolver True cuando no se encuentra el numero capicua    El tiempo se medira con la clase CTiming ya publicada en retos anteriores... Ahora si! A codear!
 
 |  
						| 
								|  |  
								| « Última modificación: 18 Agosto 2010, 16:22 pm por raul338 » |  En línea | 
 
 |  |  |  |  |  | 
			| 
					
						| [D4N93R] 
								Wiki  Desconectado 
								Mensajes: 1.646
								
								 
								My software never has bugs. Its just features!
								
								
								
								
								
								     | 
 
Tiene que ser en VB? xD |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| isseu 
								 
								
								 Desconectado 
								Mensajes: 325
								
								 
								°º¤ø,¸¸,El conocimiento es poder°º¤ø,¸¸,ø¤º°`°º¤ø,
								
								
								
								
								
								     | 
 
lo hare más tarde, pero en c++ |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| Novlucker 
								Ninja y 
								Colaborador
								      Desconectado 
								Mensajes: 10.683
								 
								Yo que tu lo pienso dos veces
								
								
								
								
								
								   | 
 
Ya lo hice, ahora lo tengo que modificar   Dada la manera en que se calcula el número, probando incluso con 89 (es uno de los ejemplos de wikipedia) se desborda, no sirven los long   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
								
								
								
								
								
								     | 
 
Corregido! Puse como double los tipos de datos, asi no hay desbordamientos   |  
						| 
								|  |  
								|  |  En línea | 
 
 |  |  |  | 
			| 
					
						| 79137913 
								       
								
								 Desconectado 
								Mensajes: 1.169
								
								 
								4 Esquinas
								
								
								
								
								
								     | 
 
HOLA!!!
 Que bueno acabo de leer el post de novlucker y me saco las dudas
 
 Gracias!!!
 |  
						| 
								|  |  
								| « Última modificación: 18 Agosto 2010, 17:00 pm por 79137913 » |  En línea | 
 
 "Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!""La peor de las ignorancias es no saber corregirlas"
 
 79137913                          *Shadow Scouts Team*
 |  |  |  | 
			| 
					
						| Novlucker 
								Ninja y 
								Colaborador
								      Desconectado 
								Mensajes: 10.683
								 
								Yo que tu lo pienso dos veces
								
								
								
								
								
								   | 
 
Function IsLychrelNumber(numero As Double, ByRef numeroFinal As Double, Optional maxVueltas As Long = 20) As Boolean Dim i As LongnumeroFinal = numero For i = 0 To maxVueltas numeroFinal = numeroFinal + CDbl(StrReverse(CStr(numeroFinal))) If (numeroFinal = CDbl(StrReverse(CStr(numeroFinal)))) Then Exit FunctionNextIsLychrelNumber = True End Function
 Entendí que numeroFinal era el último generado, así que comienzo con ese, sino lo quito y no lo uso   De cualquier manera, esto sigue siendo funcional para números "pequeños", sino hay que hacer la suma mediante strings. 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
								
								
								
								
								
								     | 
 
Optimizando me quedo como la de novlucker!!   Se me habia ocurrido comprar solo dando vuelta "despues de la mitad" del numero, pero... era mas lento ._. Aca esta, se podria decir que es practicamente igual a la de novlucker, solo que esta funciona aun para numeros grandes   Public Function EsLychrel(ByVal numero As Double, ByRef numeroFinal As Double, Optional maxVueltas As Long = 100) As Boolean    Dim i As Long ' FAIL: As Integer xDDDD    numeroFinal = Abs(numero) ' No permito numeros negativos    If numero = CDbl(StrReverse(numero)) Then Exit Function ' Si el numero ya es capicua, para que me gasto? xD    numeroFinal = Val(numero) ' Quito los decimales    maxVueltas = Abs(maxVueltas) ' 1 a -10 (sumando 1) es imposible xDDD, quito los negativos    For i = 1 To maxVueltas        ' Sumo el normal y el numero al revez, poniendo formato numerico comun        numeroFinal = numeroFinal + CDbl(StrReverse(FormatNumber(numeroFinal, 0, vbTrue, vbFalse, vbFalse)))        ' Comparo si es el mismo :P        If FormatNumber(numeroFinal, 0, vbTrue, vbFalse, vbFalse) = StrReverse(FormatNumber(numeroFinal, 0, vbTrue, vbFalse, vbFalse)) Then Exit Function    Next    EsLychrel = TrueEnd Function 
 EDIT: Hecho en 56957,0293718157 ms, 10 To 100000, maxVueltas = 1000 (con DoEvents entre calculo de cada numero   ) |  
						| 
								|  |  
								| « Última modificación: 18 Agosto 2010, 17:46 pm por raul338 » |  En línea | 
 
 |  |  |  | 
			| 
					
						| Novlucker 
								Ninja y 
								Colaborador
								      Desconectado 
								Mensajes: 10.683
								 
								Yo que tu lo pienso dos veces
								
								
								
								
								
								   | 
 
Dudo que tan grandes, la variable numeroFinal  tiene un límite y ahí crashea. Además, los códigos funcionan porque tiene el maxVueltas  bajo, donde lo agrandes muere   [Edito]: El mío crashea con números más chicos xD Saludos |  
						| 
								|  |  
								| « Última modificación: 18 Agosto 2010, 17:40 pm por Novlucker » |  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 |  |  |  |  |  
 
	
 
 
				
					
						| 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,994 |  14 Marzo 2011, 16:58 pm por 79137913
 |  
						|   |   | Reto relativamente fácil
							« 1 2 » Desafíos - Wargames
 | ace332 | 15 | 12,429 |  23 Enero 2012, 19:46 pm por Caster
 |  
						|   |   | Reto KeygenMe #2 [Facil] Ingeniería Inversa
 | jEUDi17 | 7 | 5,289 |  28 Agosto 2012, 23:29 pm por Flamer
 |  
						|   |   | Reto SQLi -1-[fácil] Desafíos - Wargames
 | elh4ck3r | 3 | 4,747 |  20 Julio 2018, 22:14 pm por engel lex
 |    |