Reto: Números primos en python

Iniciado por Novlucker, 22 Noviembre 2010, 18:52 PM

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

Novlucker

Buenas.

A ver, me he topado con algún reto por la red y me ha dado ganas de poner algo similar.

Es sencillo, crear un script que imprima una lista con los números primos menores que n

¿Donde esta el reto? En que debe de ser en el menor número de caracteres posibles, no importa cuan lento sea mientras sea en pocos caracteres, ni siquiera es necesario mostrar un mensaje para que ingrese datos, así que con el input a secas alcanza :P

Ejemplos:
10
[2, 3, 5, 7]

30
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]


¿Algún aventurero? :P

Saludos

Nota: cuentan caracteres en blanco, y en caso de empate se ve el más rápido
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

Karcrack

#1
Buena iniciativa, me guuuuusta :D

Mientras intento hacer uno 100% mio he modificado cositas que he ido encontrando:
Código (python) [Seleccionar]
print reduce(lambda x,y: reduce(lambda a,b: a and y % b, x, 1) and x+[y] or x, range(2,n + 1), [])
Me ha costado muchisimo comprenderlo al principio... el reduce() es algo inconcebible... el tio al que se le ocurrio debia ir drogado :laugh: :laugh:
Añado:Esta forma es evidentemente menos corta, ya que con dos for's ya queda mas corto, aun asi resulta enrevesadamente interensante :xD

Novlucker

#2
Esperaba que fueras tu quien se animara :P
A esa se le pueden quitar espacios innecesarios, ya que como he puesto antes los espacios cuentan, pero aún así tengo una más corta que me estoy guardando ;D
Por cierto, lo que si hay que agregar es un input para poder ingresar el n

Saludos
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

Karcrack

#3
Cita de: Novlucker en 23 Noviembre 2010, 00:16 AM
Esperaba que fueras tu quien se animara :P
A esa se le pueden quitar espacios innecesarios, ya que como he puesto antes los espacios cuentan, pero aún así tengo una más corta que me estoy guardando ;D
Por cierto, lo que si hay que agregar es un input para poder ingresar el n

Saludos
No te preocupes, que esta tarde intento hacerlo mas corto, ahora estoy en el insitituto y no puedo :laugh:


Añado:
Participo en el reto con estos codigos:
Código (python) [Seleccionar]
n=range(2,input())
print filter(lambda x:all(x%i or x==i for i in n),n)

70 caracteres
Código (python) [Seleccionar]
n=range(2,input())
for i in n:n=filter(lambda x:x%i or x==i,n)
print n

68 caracteres

El segundo es mas corto (por 2 caracteres) :D, pero el primero me gusta mas :xD

Por cierto, los saltos de linea cuentan como un caracter? O como dos? Ya que son \r\n...

Novlucker

#4
Excelentes!

En realidad yo contaría los saltos de línea como uno, y en ese caso tu primer code tendría 71 y el segundo 70, o simplemente podemos no contarlos :P
Yo también había probado con map, filter, reduce y lambdas, pero opte por usar listas por comprensión ...
Código (python) [Seleccionar]
print[x for x in range(2,input())if all(x%i for i in range(2,x))]
65! :D

No se me ocurre manera de hacerla más corta, de hecho había visto otra manera de hacerlo , pero ayer a la noche la modifiqué a esta última ;D

Aún así me parece largo, porque mira este reto y los resultados. Basicamente se pide crear un programa para factorizar, para lo cual debes de hallar número primos, y al final del ranking aparece uno que ponen que se aprovecho de un fallo de letra, pero aún así ... 55 caracteres incluido lo de los primos? :huh:

Saludos
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

Karcrack

Muy bueno tu codigo :D Yo me empeñe en usar lambda :laugh:, buen trabajo :D

Lastima no poder ver el codigo con el que participan en el desafio ese... 55 me parece poooquisimo, pero como dice ha "hecho trampas" :-\

A ver si se hacen mas retos de este tipo, siempre me gusta llevarlo todo al limite :P

Novlucker

Si, la segunda edición de la revista esa donde hacen el ejercicio esta demorada, así que estaba por escribir a ver si van a publicar las soluciones :P

CitarA ver si se hacen mas retos de este tipo, siempre me gusta llevarlo todo al limite

Y a mi, pero pocos se suman (Lord RNA dijo qu elo haría pero creo que se asustó xD) y alguien tiene que ponerlos, estaba viendo de quizás sacar alguno de los que pusiste en VB ;D

Saludos
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