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

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  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 19,670 veces)
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


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

Me estoy dando cuenta que el código es SIMILAR pero no igual al de MCKSys Argentina (Saca una sumatoria hasta 15, en base a un análisis similar)... me di cuenta ya tarde...

Creo que la idea es muy similar: En mi caso dividí la cosa en 3 partes: la sumatoria de los multiplos de 3, la de los de 5 y la sumatoria de las "colisiones" entre ambos. La primera cuenta calcula la suma de todos los "15"s que hay entre 3 y el numero dado. Luego calculas la suma de los multiplos de 5 y le resta los ya obtenidos y por ultimo hace lo mismo pero con los de 3.

La formula n * (n+1) / 2 me vino al pelo para reemplazar la sumatoria 1..n y asi quitar los bucles.

En fin, creo que este reto ya ha sido superado y convendria pasar al siguiente, aunque, bueno, no se si estan todos de acuerdo...  :)

Saludos!

PD: @BlackZeroX: Esta noche, cuando llegue a casa, hago benchmarks con compilados!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Proyect Euler 1
« Respuesta #31 en: 24 Enero 2013, 16:54 pm »

En fin, creo que este reto ya ha sido superado y convendria pasar al siguiente, aunque, bueno, no se si estan todos de acuerdo...  :)

¡Eso creo yo también!
Es genial que se participe tanto, porque la verdad es que vuestras formas de hacerlo no se me hubieran ocurrido. :D
Voy a crear el segundo reto.

DoEvents! :P


En línea

LeandroA
Moderador
***
Desconectado Desconectado

Mensajes: 760


www.leandroascierto.com


Ver Perfil WWW
Re: [RETO] Proyect Euler 1
« Respuesta #32 en: 24 Enero 2013, 19:39 pm »

Bueno esta es la mía, pero solo responde el enunciado de la pagina no tiene mas opciones.

Código
  1. Private Function Euler1_LeandroA() As Long
  2.  
  3.    Dim i As Long, lResult As Long, lSum As Long
  4.  
  5.    For i = 1 To 999 \ 3 Step 3
  6.        lSum = lSum + (i * 9) + 9
  7.    Next
  8.  
  9.    For i = 1 To 999 \ 5 Step 5
  10.        lResult = (i * 25) + 25
  11.        If (lResult Mod 15) Then lSum = lSum + lResult
  12.    Next
  13.  
  14.    Euler1_LeandroA = lSum - 15
  15.  
  16. End Function
  17.  
En línea

rob1104


Desconectado Desconectado

Mensajes: 340


Usuario común


Ver Perfil WWW
Re: [RETO] Proyect Euler 1
« Respuesta #33 en: 24 Enero 2013, 22:28 pm »

Va el mio, seguro gano al mas lento  ;D

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

Saludos!!!
En línea

Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.
imoen


Desconectado Desconectado

Mensajes: 1.589



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

HOla

Rob1104 , tu codigo es lo mas normal , y no es el mas lento me gusta por que es clarito simple y funcional

LeandroA, siento decirte que tu código es el mas lento de todo, o al menos eso creo , pq recorres el campo de datos 2 veces , aunque vallas haciendo los saltos de 3 y 5 ademas que los bucles for son quizá los mas lentos , eso combinado con que calculas el modulo te ponen en el codigo mas lento.


Una cosa el código sea lento no significa que sea el peor , pq insisto en que los códigos deben ser legibles y entendibles por cualquiera , un codigo muy veloz pero ofuscado tampoco es rentable a pesar de ser muy rapido pero bueno , que esta muy bien que haya de todo :)

bs imoen
En línea

Medion Akoya p6624
i-3 370
8 gigas DDR 3 RAM //750 hd 5400
gforce gt425 optimus XDD
Esta es mi casa, mi pueblo , o lo que queda de el aun asi lucharemos ... POR BENALIA....!!

srta imoen
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [RETO] Proyect Euler 1
« Respuesta #35 en: 25 Enero 2013, 12:42 pm »

Cierto, pero en estos retos se trata de exprimir al máximo la velocidad. Es indiferente que no sea bonito (en este caso en concreto).
Vale todo. ;)

DoEvents! :P
En línea

imoen


Desconectado Desconectado

Mensajes: 1.589



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

Pues te lanzo la version del reto 1.1

Como hay que hacerlo rapido , y di distribuyes cada calculo de busqueda los 3 por un lado y los 5 por el otro , peroo cada bloque aun core distinto del procesador :P  ( tambien me sirve si haces dos hilos y ejecutas los hilos a la vez ) uhh , en el caso de no haber cores pero tener HT pues es lo mismo, lo que no se es si VB6 permite el balanceo de carga por nucleos :P

bs imoen

PD -> como lo flipo ehh XDDD
En línea

Medion Akoya p6624
i-3 370
8 gigas DDR 3 RAM //750 hd 5400
gforce gt425 optimus XDD
Esta es mi casa, mi pueblo , o lo que queda de el aun asi lucharemos ... POR BENALIA....!!

srta imoen
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.465


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [RETO] Proyect Euler 1
« Respuesta #37 en: 25 Enero 2013, 20:48 pm »

En este caso, para mejorar la velocidad, solo tuve que analizar el problema, plantear diferentes ideas y usar matematica. Por lo que veo, BlackZeroX hizo lo mismo.

Recuerda que el procesador mas poderoso del planeta esta sobre tus hombros y es el UNICO que funciona mejor mientras MAS lo usas.  ;)

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: [RETO] Proyect Euler 1
« Respuesta #38 en: 25 Enero 2013, 23:20 pm »

Una cosa el código sea lento no significa que sea el peor , pq insisto en que los códigos deben ser legibles y entendibles por cualquiera , un codigo muy veloz pero ofuscado tampoco es rentable a pesar de ser muy rapido pero bueno , que esta muy bien que haya de todo :)

Los análisis matemáticos para no dejarle la carga a el CPU no es igual a ofuscar el código... de hecho cuando se tienen limitan-tes como en los PICS se deben usar mucho las matemáticas de cualquier índole.

Pues te lanzo la version del reto 1.1

Como hay que hacerlo rapido , y di distribuyes cada calculo de busqueda los 3 por un lado y los 5 por el otro , peroo cada bloque aun core distinto del procesador :P  ( tambien me sirve si haces dos hilos y ejecutas los hilos a la vez ) uhh , en el caso de no haber cores pero tener HT pues es lo mismo, lo que no se es si VB6 permite el balanceo de carga por nucleos :P

bs imoen

PD -> como lo flipo ehh XDDD

Los hilos y balanceo por núcleo es inestable en VB6... sin en cambio solo son llamadas a APIS.

El código en C se parecería algo así... en VB6 sería prácticamente lo mismo.
Código
  1. void threadFunc()
  2. {
  3.    //  Codigo...
  4.    ExitThread (dwAlgunValor);
  5. }
  6.  
  7. // Los siguiente en algún proceso X como main()...
  8.  
  9. GetSystemInfo(&sysInfo);
  10. printf("Numero de nucleos: %d.\n", (int)sysInfo.dwNumberOfProcessors);
  11. hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threadFunc, NULL, 0, &dwThreadId);
  12.  
  13. if (SetThreadAffinityMask(hThread, 1 << (bCoreToUse % 8)) != 0)
  14. printf("ThreadAffinity se establecio con exito en el nucleo %d.\n", (int)bCoreToUse);
  15. else
  16. printf("ThreadAffinity error! El sistema repartira la carga del Thread!");
  17.  
  18.        if (!GetExitCodeThread (hThread, &dwRes)
  19. printf("Imposible de obtener el resultado del hilo");
  20. ...
  21.  
  22.  

Aun así este proceso es MUY LENTO cuando ya se a generado una formula matemática a lápiz y papel la cual es la mas optima posible.

P.D.: Los programadores estamos muchos años atrasados en la tecnología debido a que SIEMPRE le dejamos el trabajo pesado al hardware...

Dulces Lunas!¡.
« Última modificación: 25 Enero 2013, 23:51 pm por BlackZeroX (Astaroth) » En línea

The Dark Shadow is my passion.
imoen


Desconectado Desconectado

Mensajes: 1.589



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

Hola

he estado investigando un poco sobre VB6 y aunque no tiene exactamente de forma nativa el uso de nucleos si que se puede hacer algun apaño

os dejo un link ;http://www.svcommunity.org/forum/vb/threads-o-hilos-en-vb6-0/

Claro en C si hay mas opciones , y estamos seguros que distribuir la carga a cada core es mas lento que la formulita matematica ?¿

bs imoen
En línea

Medion Akoya p6624
i-3 370
8 gigas DDR 3 RAM //750 hd 5400
gforce gt425 optimus XDD
Esta es mi casa, mi pueblo , o lo que queda de el aun asi lucharemos ... POR BENALIA....!!

srta imoen
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,130 Ú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 9,852 Último mensaje 25 Enero 2013, 23:19 pm
por Danyfirex
[RETO] Project Euler 3 « 1 2 »
Programación Visual Basic
Psyke1 13 6,314 Último mensaje 3 Febrero 2013, 20:45 pm
por imoen
[RETO] Project Euler 4 « 1 2 »
Programación Visual Basic
Psyke1 10 5,587 Ú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 1,950 Ú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