Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware
Autor
|
Tema: Reto: Números primos en python (Leído 2,854 veces)
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
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  Ejemplos: 10 [2, 3, 5, 7]
30 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] ¿Algún aventurero?  Saludos Nota: cuentan caracteres en blanco, y en caso de empate se ve el más rápido
|
|
|
|
« Última modificación: 22 Noviembre 2010, 18:59 por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Karcrack
Desconectado
Mensajes: 2.192
Se siente observado ¬¬'
|
Buena iniciativa, me guuuuusta  Mientras intento hacer uno 100% mio he modificado cositas que he ido encontrando: 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 Añado:Esta forma es evidentemente menos corta, ya que con dos for's ya queda mas corto, aun asi resulta enrevesadamente interensante 
|
|
|
|
« Última modificación: 22 Noviembre 2010, 22:39 por Karcrack »
|
En línea
|
|
|
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
Esperaba que fueras tu quien se animara  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  Por cierto, lo que si hay que agregar es un input para poder ingresar el nSaludos
|
|
|
|
« Última modificación: 23 Noviembre 2010, 01:13 por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Karcrack
Desconectado
Mensajes: 2.192
Se siente observado ¬¬'
|
Esperaba que fueras tu quien se animara  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  Por cierto, lo que si hay que agregar es un input para poder ingresar el nSaludos No te preocupes, que esta tarde intento hacerlo mas corto, ahora estoy en el insitituto y no puedo  Añado:Participo en el reto con estos codigos: n=range(2,input()) print filter(lambda x:all(x%i or x==i for i in n),n) 70 caracteres 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)  , pero el primero me gusta mas  Por cierto, los saltos de linea cuentan como un caracter? O como dos? Ya que son \r\n...
|
|
|
|
« Última modificación: 23 Noviembre 2010, 14:14 por Karcrack »
|
En línea
|
|
|
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
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  Yo también había probado con map, filter, reduce y lambdas, pero opte por usar listas por comprensión ... print[x for x in range(2,input())if all(x%i for i in range(2,x))] 65!  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  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?  Saludos
|
|
|
|
« Última modificación: 24 Noviembre 2010, 13:30 por Novlucker »
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
Karcrack
Desconectado
Mensajes: 2.192
Se siente observado ¬¬'
|
Muy bueno tu codigo  Yo me empeñe en usar lambda  , buen trabajo  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 
|
|
|
|
|
En línea
|
|
|
|
Novlucker
Ninja y
Ex-Staff
Desconectado
Mensajes: 10.239
Yo que tu lo pienso dos veces
|
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  A 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  Saludos
|
|
|
|
|
En línea
|
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD http://twitter.com/novlucker "Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro." Albert Einstein
|
|
|
|
|