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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [RETO] Project Euler 1
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 3 4 5 Ir Abajo Respuesta Imprimir
Autor Tema: [RETO] Project Euler 1  (Leído 21,524 veces)
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
[RETO] Project Euler 1
« en: 23 Enero 2013, 12:15 pm »

¿Qué os parece si hacemos todos los retos de Proyect Euler ?
Después se podría poner una chincheta con todos los ejercicios guardados. :)

¿Empezamos por el 1?
Código:
http://projecteuler.net/problem=1

DoEvents! :P


« Última modificación: 3 Febrero 2013, 16:21 pm por Psyke1 » En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: [RETO] Proyect Euler 1
« Respuesta #1 en: 23 Enero 2013, 12:24 pm »

me parece excelente.  ;D
Aqui tienes a un participante. Por cierto pésimo en matemáticas. jajajaja

EDITO:

segun el problema dice esto.

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.


según lo que se 10 es divisible entre 5.

entonces la suma seria 33. o no ?


EDITO. 1


Si esta bien no leí la palabra below.

saludos


EDITO: 2

Aquí esta el mio.



Código
  1. Private Sub Form_Load()
  2. Dim resultado As Long
  3. Dim i As Integer
  4. Dim d1, d2 As Boolean
  5. For i = 1 To 999
  6. d1 = CBool((i / 3) = Int(i / 3))
  7. d2 = CBool((i / 5) = Int(i / 5))
  8. If d1 Or d2 Then
  9. resultado = resultado + i
  10. End If
  11. Next i
  12. MsgBox (resultado)
  13. End Sub


Como Funcion para un Numero dado.

Código
  1. Function mul_3_5(Numero As Long) As Long
  2. Dim resultado As Long
  3. Dim i As Integer
  4. Dim d1, d2 As Boolean
  5. For i = 1 To Numero
  6. d1 = CBool((i / 3) = Int(i / 3))
  7. d2 = CBool((i / 5) = Int(i / 5))
  8. If d1 Or d2 Then
  9. resultado = resultado + i
  10. End If
  11. Next i
  12. mul_3_5 = (resultado)
  13. End Function

saludos


« Última modificación: 23 Enero 2013, 14:09 pm por Danyfirex » En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] Proyect Euler 1
« Respuesta #2 en: 23 Enero 2013, 14:17 pm »

HOLA!!!

Dany, yo que vos busco sobre optimizacion de codigo.

Código
  1. Private Function mul5and3below1000() As Long
  2.    Dim ct As Long
  3.    Dim aux As Long
  4.    Do
  5.        mul5and3below1000 = mul5and3below1000 + aux + aux2
  6.        ct = ct + 1
  7.        aux = ct + ct + ct
  8.        aux2 = ct + ct + ct + ct + ct
  9.    Loop While aux2 < 1000
  10.    Do
  11.        mul5and3below1000 = mul5and3below1000 + aux
  12.        ct = ct + 1
  13.        aux = ct + ct + ct
  14.    Loop While aux < 1000
  15.    ct = 0
  16.    aux = 0
  17.    Do
  18.        mul5and3below1000 = mul5and3below1000 - aux
  19.        ct = ct + 1
  20.        aux = ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct
  21.    Loop While aux < 1000
  22. End Function

GRACIAS POR LEER!!!
« Última modificación: 23 Enero 2013, 17:10 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*
Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: [RETO] Proyect Euler 1
« Respuesta #3 en: 23 Enero 2013, 15:27 pm »

HOLA!!!
Dany, yo que vos busco sobre optimizacion de codigo.

gracias por el Consejo.

Codigo optimizado:

Código
  1. Function mul_3_5() As Long
  2. Dim i As Integer
  3. For i = 1 To 999
  4. If (i Mod 3) < 1 Or (i Mod 5) < 1 Then
  5. mul_3_5 = mul_3_5 + i
  6. End If
  7. Next i
  8. End Function

Saludos
En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] Proyect Euler 1
« Respuesta #4 en: 23 Enero 2013, 16:29 pm »

HOLA!!!

Bueno, mejoraste el largo del codigo y un poco la velocidad esta bien, pero mira el mio y tu codigo.

Podras observar que en mi codigo funciona haciendo sumas de los casos positivos dentro de el campo muestral (1-999) y quitando al final las superposiciones mientras que el tuyo lo que hace es analizar una por una todas las probabilidades y extraer de ellas las que cumplen las condiciones. la cantidad de vueltas del primer bucle es de 200 , el segundo 133 y el tercero 66, dando un total de 399 vueltas muchas menos que en tu codigo de 999.

En definitiva tu codigo hace prueba y error, el mio une los 2 grupos de multiplos y quita los repetidos.

P.d: Eso que hago de ct + ct + ct es lo mismo que ct *3 pero es mas rapido para que lo tengas en cuenta.

GRACIAS POR LEER!!!
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*
$Edu$


Desconectado Desconectado

Mensajes: 1.842



Ver Perfil
Re: [RETO] Proyect Euler 1
« Respuesta #5 en: 23 Enero 2013, 16:42 pm »

Me instalaria el visual basic especialmente para esos retos xD Pero podrias traducirlos y plantear el ejercicio como haces siempre Psyke? asi nadie se confunde traduciendo y terminamos haciendo todos cosas distintas jaja, y ademas de que esta bueno cuando pones como queres la funcion y ejemplos de valores que retornara.
En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: [RETO] Proyect Euler 1
« Respuesta #6 en: 23 Enero 2013, 16:45 pm »

HOLA!!!

Bueno, mejoraste el largo del codigo y un poco la velocidad esta bien, pero mira el mio y tu codigo.

Podras observar que en mi codigo funciona haciendo sumas de los casos positivos dentro de el campo muestral (1-999) y quitando al final las superposiciones mientras que el tuyo lo que hace es analizar una por una todas las probabilidades y extraer de ellas las que cumplen las condiciones. la cantidad de vueltas del primer bucle es de 200 , el segundo 133 y el tercero 66, dando un total de 399 vueltas muchas menos que en tu codigo de 999.

En definitiva tu codigo hace prueba y error, el mio une los 2 grupos de multiplos y quita los repetidos.

P.d: Eso que hago de ct + ct + ct es lo mismo que ct *3 pero es mas rapido para que lo tengas en cuenta.

GRACIAS POR LEER!!!

Claro pero si te fijas en tu código haciendo tantas sumas pierdes velocidad. si te fijas en el tiempo aun mi función con 999 repeticiones es un 30% o 40%  mas rápida que la tuya.

Edito: un 20% o 10%


« Última modificación: 23 Enero 2013, 16:59 pm por Danyfirex » En línea

79137913


Desconectado Desconectado

Mensajes: 1.169


4 Esquinas


Ver Perfil WWW
Re: [RETO] Proyect Euler 1
« Respuesta #7 en: 23 Enero 2013, 17:09 pm »

HOLA!!!

Eso que me decis me deja atonito...

Hice los testeos y los acabe de realizar nuevamente, tu funcion es aprox 100% mas lenta que la mia ( y siendo generoso 100%), proba con este ejemplo que arme para medir el timing, acordate que se testea compilado.

(borre el codigo por que lo hizo E_C abajo.

GRACIAS POR LEER!!!
« Última modificación: 23 Enero 2013, 17:32 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*
Elemental Code


Desconectado Desconectado

Mensajes: 622


Im beyond the system


Ver Perfil
Re: [RETO] Proyect Euler 1
« Respuesta #8 en: 23 Enero 2013, 17:29 pm »

Código
  1. Private Sub Form_Load()
  2.    Form1.Show
  3.    Form1.AutoRedraw = True
  4.    MsgBox "empezara luego del ok"
  5.    t = Timer
  6.    For x = 0 To 100000
  7.        Call mul5and3below1000
  8.    Next
  9.    Form1.Print "tiempo 7913 " & Timer - t
  10.    Form1.Print "resultado 7913 " & mul5and3below1000
  11.    t = Timer
  12.    For x = 0 To 100000
  13.        Call mul_3_5
  14.    Next
  15.    Form1.Print "Tiempo dany " & Timer - t
  16.    Form1.Print "Resultado dani " & mul_3_5
  17. End Sub
  18. Private Function mul5and3below1000() As Long
  19.   Dim ct As Long
  20.   Dim aux As Long
  21.   Do
  22.       mul5and3below1000 = mul5and3below1000 + aux + aux2
  23.       ct = ct + 1
  24.       aux = ct + ct + ct
  25.       aux2 = ct + ct + ct + ct + ct
  26.   Loop While aux2 < 1000
  27.   Do
  28.       mul5and3below1000 = mul5and3below1000 + aux
  29.       ct = ct + 1
  30.       aux = ct + ct + ct
  31.   Loop While aux < 1000
  32.   ct = 0
  33.   aux = 0
  34.   Do
  35.       mul5and3below1000 = mul5and3below1000 - aux
  36.       ct = ct + 1
  37.       aux = ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct
  38.   Loop While aux < 1000
  39. End Function
  40.  
  41. Function mul_3_5() As Long
  42. Dim i As Integer
  43. For i = 1 To 999
  44. If (i Mod 3) < 1 Or (i Mod 5) < 1 Then
  45. mul_3_5 = mul_3_5 + i
  46. End If
  47. Next i
  48. End Function

Ok, con esta funcion de testeo los resultados mios son:
En línea

I CODE FOR $$$
Programo por $$$
Hago tareas, trabajos para la facultad, lo que sea en VB6.0

Mis programas
Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: [RETO] Proyect Euler 1
« Respuesta #9 en: 23 Enero 2013, 17:51 pm »

HOLA!!!

Eso que me decis me deja atonito...

Hice los testeos y los acabe de realizar nuevamente, tu funcion es aprox 100% mas lenta que la mia ( y siendo generoso 100%), proba con este ejemplo que arme para medir el timing, acordate que se testea compilado.

(borre el codigo por que lo hizo E_C abajo.

GRACIAS POR LEER!!!

Estabas en lo cierto. bueno no un 100 pero si mucho mas.

la comprobé así.

Código
  1. Dim ct As New CTiming
  2. Private Sub Form_Load()
  3. Form1.Show
  4. MsgBox "empezara luego del ok"
  5. ct.Reset
  6. For x = 1 To 10000
  7. Call mul5and3below1000
  8. Next
  9. Form1.Print "Tiempo 7913 -->" & ct.sElapsed
  10. Form1.Print "Resultado 7913 -->" & mul5and3below1000()
  11. ct.Reset
  12. For x = 1 To 10000
  13. Call mul_3_5
  14. Next
  15. Form1.Print "Tiempo dany -->" & ct.sElapsed
  16. Form1.Print "Resultado dany -->" & mul_3_5()
  17. End Sub
  18.  
  19.  
  20. Private Function mul5and3below1000() As Long
  21.    Dim ct As Long
  22.    Dim aux As Long
  23.    Do
  24.        mul5and3below1000 = mul5and3below1000 + aux + aux2
  25.        ct = ct + 1
  26.        aux = ct + ct + ct
  27.        aux2 = ct + ct + ct + ct + ct
  28.    Loop While aux2 < 1000
  29.    Do
  30.        mul5and3below1000 = mul5and3below1000 + aux
  31.        ct = ct + 1
  32.        aux = ct + ct + ct
  33.    Loop While aux < 1000
  34.    ct = 0
  35.    aux = 0
  36.    Do
  37.        mul5and3below1000 = mul5and3below1000 - aux
  38.        ct = ct + 1
  39.        aux = ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct + ct
  40.    Loop While aux < 1000
  41. End Function
  42.  
  43. Function mul_3_5() As Long
  44. Dim i As Integer
  45. For i = 1 To 999
  46. If (i Mod 3) < 1 Or (i Mod 5) < 1 Then
  47. mul_3_5 = mul_3_5 + i
  48. End If
  49. Next i
  50. End Function
  51.  

gracias vere si la puedo mejorar.

saludos
En línea

Páginas: [1] 2 3 4 5 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Projecto Euler problema 12
Ejercicios
lDanny 5 5,414 Último mensaje 16 Octubre 2010, 04:33 am
por [L]ord [R]NA
[RETO] Project Euler 2 « 1 2 3 »
Programación Visual Basic
Psyke1 23 10,895 Último mensaje 25 Enero 2013, 23:19 pm
por Danyfirex
[RETO] Project Euler 3 « 1 2 »
Programación Visual Basic
Psyke1 13 6,916 Último mensaje 3 Febrero 2013, 20:45 pm
por imoen
[RETO] Project Euler 4 « 1 2 »
Programación Visual Basic
Psyke1 10 6,068 Último mensaje 4 Febrero 2013, 23:32 pm
por imoen
Ayuda con el calculo de Pi por la Serie de Euler
Programación C/C++
Rollingman216 3 2,191 Último mensaje 24 Agosto 2017, 04:09 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines