Underc0de Weekend [Correcciones FINALES] Reto #1

Iniciado por 79137913, Octubre 31, 2014, 08:26:23 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Octubre 31, 2014, 08:26:23 AM Ultima modificación: Octubre 31, 2014, 08:32:44 AM por 79137913
HOLA!!!

Resultados de codigos entregados para los primeros 100 numeros primos:

Fermino v1: 24984 iteraciones, resultado correcto.

Fermino v2: 24984 iteraciones, resultado correcto.

Azav v1: 5745 iteraciones, resultado correcto.

Azav v2: 3481 iteraciones, resultado correcto.

2Fac3R: [ERROR] El codigo no devuelve los primeros 100 numeros primos, Output:
Código: php
3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 0 6 16 3077807600 3077807492 3077807488 3077462358 3077810296 3077772892 3077778712 0 3077467751 3077976052 3077978376 1 134519376 3077902505 3077978816 3074909459 1 1 0 3077296832 3077807492 3077807600 3077808804 3076452340 2 1 1 3074909803 3076453348 3074729160 3215560036 3077978376 3077813704 134519360 3076452340 3074909925 134514048 134519565 134519408 3076453348 3077808756 3074909878 134519360 134514299 134514048 134519565 134519408
iteraciones: 99


Once: 2377 iteraciones, resultado correcto. Iteraciones reales: 270 , Iteraciones anidadas: 2107.

rush: [ERROR] el codigo no calcula los primeros x numeros primos calcula sobre una base de aleatoreidad y aparte es tu funcion primos es un check if it prime, entonces aunque te arregle el codigo y quite la parte de aleatoreidad por un r++; tu codigo daria los numeros primos por debajo de 100, no los primeros 100.

rollth: [ERROR] el codigo no calcula los primeros x numeros primos, sino que calcula los numeros primos menores a x.

Expermicid: [INVALIDADO] Iteraciones 100, utiliza un poco de magia negra por que no calcula realmente los primos, sino que los solicita a una funcion embebida. Tu codigo es sublime, pero con solo poner Prime.first X ya tenes los primeros X numeros primos sin mas problemas y sin tantas lineas.

OLM: [ERROR] El codigo es bueno, pero empieza a calcular los primos desde 7, lamento informar que el primer primo es 2. Output:
Código: php
[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563]


[Q]3rV[0]: [ERROR] Buen codigo, me gusto pero lamentablemente el codigo no calcula los primeros x numeros primos, sino que calcula los numeros primos menores a x.

bocha: [ERROR] El codigo no calcula primos.

rollth: [ERROR] El codigo no devuelve los primeros 100 primos (Checkea que figura el 4 en vez del 3). Output:
Código: php
Introduce un numero: 2
4
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199
211
223
227
229
233
239
241
251
257
263
269
271
277
281
283
293
307
311
313
317
331
337
347
349
353
359
367
373
379
383
389
397
401
409
419
421
431
433
439
443
449
457
461
463
467
479
487
491
499
503
509
521
523
541


d3ztr3za: [ERROR] El codigo no calcula los primeros 100 fijos, se usa un array que contiene a los primeros 4.

OLM v2: 145530 iteraciones, resultado correcto.

Quitando codigos erroneos e invalidados por ahora nos queda asi:
1er Puesto: Once 2377 iteraciones
2do Puesto: Azav v2 3481 iteraciones
3er Puesto: Fermino v1 y v2 24984 iteraciones
4to Puesto: OLM v2: 145530 iteraciones



GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scouts Team*                                                No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

¿Os importaría publicar el código para ver como lo hicisteis?
Podría mejorar el mio si el for solo fuese hasta la mitad, no es necesario comprobar los números mayores a la mitad del numero a comprobar.
Yo dejo el mio, he utilizado Python.

Código: python

def calcular_primos(n):
array = []
primo = True
num = 2
while n > 0:
for i in range(2,num):
if num%i == 0:
primo = False
if primo == True:
array.append(num)
n-=1
primo = True
num+=1
return array


Saludos.
Nunca consideres el estudio como una obligación, sino como una oportunidad para adentrarse en el maravilloso mundo del saber.

HOLA!!!

Codigos Ganadores:
1er Puesto: Once 2377 iteraciones
Código: python
import math
p = 3
primos = [2]
n = input("Ingrese n: ")
while n > len(primos):
    if not filter(lambda x: not p % x, range(3, int(math.sqrt(p)) + 1, 2)):
        primos.append(p)
    p += 2
print primos

2do Puesto: Azav v2 3481 iteraciones
Código: python
    listaprimos = [2]
    n = int(input("¿Cuantos números primos desea calcular?\n>"))
    k = 3
    while len(listaprimos) < n:
            var = True
            for primo in listaprimos:
                    if primo > (k // 2):
                            break
                    if (k % primo) == 0:
                            var = False
                            break
            if var:
                    listaprimos.append(k)
            k += 2
    print(listaprimos)
    input()

3er Puesto: Fermino v1 y v2 24984 iteraciones
Código: php
    <?php
            function Primo($N)
            {
                    //if($N == -1 || $N == 0 || $N == 1) // Si no es primo ni compuesto devolvemos NULL (Adaptado para la ocasión, como comenzamos la iteración en 2, esto se puede bypassear);
                    //      return null;
     
                    for($i = 2; $i < $N; $i++) // Testeamos el resto de una división, desde 2, hasta $N -1;
                            if(($N % $i) == 0) // Si es 0 (Encontramos un divisor además de 1 o $N), devolvemos FALSE;
                                    return false;
     
                    return true; // Sino, devolvemos TRUE;
            }
     
            function Primos($X)
            {
                    for($j = 2, $i = 0; $i < $X; $j++) // Si aún no encontramos $X primos ($i = cantidad de primos encontrados; $j = 0, aumenta en cada iteración) (Comenzamos la iteración en 2, sabiendo que ni 0 ni 1 son primos);
                    {
                            if(Primo($j) === true) // Si es primo;
                            {
                                    $Data[] = $j; // Lo agregamos al array de datos;
                                    $i++; // Aumentamos el contador de primos encontrados;
                            }
                    }
     
                    return $Data;
            }
     
     
            var_dump(Primos(20));

4to Puesto: OLM v2: 145530 iteraciones
Código: python
def calcular_primos(n):
        array = []
        primo = True
        num = 2
        while n > 0:
                for i in range(2,num):
                        if num%i == 0:
                                primo = False
                if primo == True:
                        array.append(num)
                        n-=1
                primo = True
                num+=1
        return array



Conste que esos son los codigos enviados, todos fueron editados para calcular la cantidad de iteraciones.


Mencion especial:
Expermicid creo un codigo que realmente es el mas simple y usa magia negra, solo para que sepan como fue:
Código: ruby
    require 'mathn'
    lista = []
    print "Ingrese la cantidad de numero primos que desea "
    n = gets.chomp
    pri = Prime.instance
    pri.each do |prime|
            lista << prime
            puts prime # linea que muestra los numeros
            break if lista.size == n.to_i
    end

Yo le comente que con solo usar Prime.first X ya tenia el ejercicio resuelto.

Felicitaciones a todos los participantes.
GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scouts Team*                                                No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Octubre 31, 2014, 11:30:28 AM #3 Ultima modificación: Octubre 31, 2014, 01:31:14 PM por Snifer
Aqui va mi codigo arreglaod, de verdad, quise hacerlo mas rapido y lo arruine, cuantas interacciones hace numeros? que no se como mirarlo
Código: c
/* Numeros primos */

#include <stdio.h>

int main() {

int num2,x,primo,mitad;
primo=1;

printf("Introduce un numero: ");
scanf("%d",&num2);

for (int num1=1;primo<=num2;num1++){
mitad=(num1/2);
x=0;

for(int i=1;i<=num1&&x<=2;i++)
{
    if(i==mitad&&num1>=20){
      i=num1-1;
    }
    if(num1%i==0){
    x++;
    }
}


if(x==2)
{
    printf("%d\n",num1);
    primo++;

}
}


}
RollthBuen hacker mejor No tienes permitido ver los links. Registrarse o Entrar a mi cuenta/No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

:O creí que lo que hacía filter no contaba. Podría haber sacado todo con menos iteraciones con este código:

Código: python
import math
iteraciones = 0
p = 3
primos = [2]
n = input("Ingrese n: ")
while n > len(primos):
    iteraciones += 1
    for x in xrange(3, int(math.sqrt(p)) + 1, 2):
        iteraciones += 1
        if not p % x:
            break
    else:
        primos.append(p)
    p += 2
   
print primos
print iteraciones


1277 iteraciones

Saludos!







No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

HOLA!!!

Rolth, tu codigo hace 27201 iteraciones.

Once, las iteraciones del bucle while superior no cuentan , por que son tomadas en cuenta en las iteraciones internas del bucle for, por ende ese codigo lo realiza en 1007 iteraciones, felicitaciones!

GRACIAS POR LEER!!!
"Algunos creen que soy un bot, puede que tengan razon"
"Como no se puede igualar a Dios, ya he decidido que hacer, ¡SUPERARLO!"
"La peor de las ignorancias es no saber corregirlas"

*Shadow Scouts Team*                                                No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Estaba esperando los resultados, tenía esperanza de ganar pero Once me superó, ¡felicitaciones Once!

Lo que me extrañó bastante es que de 11 participantes sólo 4 hayan enviados códigos válidos, eso quiere decir que tal vez la instrucciones no se entregaron de manera muy clara o detallada. Hay que mejorar eso la próxima vez.

Respecto a los retos, sigan así, la iniciativa es muy buena. Este primer reto fue bastante sencillo, ideal para que todos pudieran participar, seguramente los siguientes irán siendo un poco más complejos pero es importante que no dejen de lado a mucha gente.

¡Saludos!


Espero que el próximo no ser descalificado por mago oscuro xD jaja

Saludos

jajaja Expermicid, usa tus poderes mágicos!!!


Saludos

Jajajaja parece ser que no entendí muy bien el reto entonces xD!, iba a enviar otro programa, pero pensé que solo se podía enviar una sola vez!
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta