Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - MCKSys Argentina

#4181
De acuerdo. Y hasta dónde has llegado?

En el link anterior no estan solo las reglas, sino tambien varias cosas mas (FAQ).

Te recomiendo darle una mirada mas profunda...  ;)

Saludos!
#4183
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!
#4184
Cita de: BlackZeroX (Astaroth) en 24 Enero 2013, 14:12 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!
#4185
Cita de: BlackZeroX (Astaroth) en 24 Enero 2013, 12:10 PM
Madre que me desvelo son las 06:00 am y no e dormido.

Dulces Lunas!¡.

jejeje.. estamos igual  :)

De todas formas, estuve probando hasta 20000 y mi función no genera errores (Comparada con la de Psyke1).

Creo que fue buena idea sacrificar los bucles por las multiplicaciones y divisiones...  :)
#4186
Cita de: BlackZeroX (Astaroth) en 24 Enero 2013, 11:27 AM
Si no mal recuerdo de mis clases la base del procesamiento numérico de una computadora esta en la SUMA...

Se zarpaste con esas operaciones aun que NO funciona para varios números!¡... Probé tu función y la mía (Debido a la alta complejidad) con la función de Spyke1...
Código (vb) [Seleccionar]

Const MAX_FOR   As Long = 10000
Dim i as long

    For i = 1 To MAX_FOR
        If Not (PE_1(i) = Euler_1(i)) Then
            Debug.Print "BlackZeroX Error: "; i
        End If
    Next
   
    For i = 1 To MAX_FOR
        If Not (PE_1(i) = mul3and5(i)) Then
            Debug.Print "MCKSys Argentina Error: "; i
        End If
    Next


Son mas errores pero me corta las primeras salidas el Debug...

MCKSys Argentina Error:  7038
MCKSys Argentina Error:  7053
...
...
...
MCKSys Argentina Error:  9963
MCKSys Argentina Error:  9978
MCKSys Argentina Error:  9993
[code]

Dulces Lunas!¡.
[/code]

Me parece que están al revés. Euler_1 es mi función y mul3and5 es la tuya.  :P
#4187
Nueva función:

Código (vb) [Seleccionar]

Public Function Euler_1(ByVal lNum As Long) As Long
Dim S5 As Long

    If lNum& And &H80000000 Then Exit Function

    lNum& = lNum& - &H1
   
    Euler_1& = ((lNum& \ &HF) * ((lNum& \ &HF) + 1) \ 2) * &HF
   
    S5& = ((lNum& \ &H5) * ((lNum& \ &H5) + 1) \ 2) * &H5
   
    Euler_1& = S5& - Euler_1&
   
    Euler_1& = Euler_1& + (((lNum& \ &H3) * ((lNum& \ &H3) + 1) \ 2) * &H3)
End Function


Compilados, estos son los tiempos:


Tiempo BlackZeroX V2        66.052 msec
Resultado BlackZeroX V2     233168

Tiempo BlackZeroX V1        43.226 msec
Resultado BlackZeroX V1     233168

Tiempo 7913   144.274 msec
Resultado 7913              233168

Tiempo dany   1,635.416 msec
Resultado dany              233168

Tiempo Spyke1 176.800 msec
Resultado Spyke1            233168

Tiempo MCKSys 0.983 msec
Resultado MCKSys            233168



Estoy desvelado y no lo puedo creer aún, así que verifiquen!!!!!!!!!!!

Saludos!
#4188
Pongo el mío, aunque es más lento que el de BlackZeroX:

Código (vb) [Seleccionar]

Public Function Euler_1(ByVal lNum As Long) As Long
Dim Q As Long
Dim S5 As Long

    If lNum& And &H80000000 Then Exit Function

    lNum& = lNum& - &H1
   
    For Q& = &H0 To (lNum& \ &HF)
        Euler_1& = Euler_1& + (&HF * Q&)
    Next Q
   
    S5& = 0
    For Q& = &H1 To (lNum& \ &H5)
        S5& = S5& + (&H5 * Q&)
    Next Q
    Euler_1& = S5& - Euler_1&
   
    For Q& = &H1 To (lNum& \ &H3)
        Euler_1& = Euler_1& + (&H3 * Q&)
    Next Q
End Function


En un EXE compilado, los tiempos me dan:


Tiempo BlackZeroX V2        55.732 msec
Resultado BlackZeroX V2     233168

Tiempo BlackZeroX V1        39.737 msec
Resultado BlackZeroX V1     233168

Tiempo 7913   152.260 msec
Resultado 7913              233168

Tiempo dany   1,627.764 msec
Resultado dany              233168

Tiempo Spyke1 175.199 msec
Resultado Spyke1            233168

Tiempo MCKSys 98.207 msec
Resultado MCKSys            233168


PD: Mirando el ASM generado, veo que el secreto está en no usar multiplicaciones ni divisiones. Aunque no es sencillo hallar un algoritmo con eso (y que sea diferente al de BlackZeroX!!  ;D)
#4189
Ingeniería Inversa / Re: Mejor packer?
24 Enero 2013, 07:32 AM
Bueno, coincido con UNDER, el mejor packer es el que TU hagas.

Ahora, si quieres usar algo standar, dependerá de qué lenguaje hallas usado para hacer la aplicación.

Por ej. hay packers que funcionan mejor para ejecutables nativos que para interpretados (por ej. .NET). Por otro lado, hay packers para .NET que no funcionan en nativos.

PD: Con nativos quiero decir ejecutables que no usan maquinas virtuales para ejecutar su código.
#4190
Ingeniería Inversa / Re: KeygenMe en D
24 Enero 2013, 07:26 AM
Keygen (python) + Ejecución del mismo



PD: Si ingresas texto no numerico como serial, el programa crashea.