Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Karcrack en 11 Enero 2011, 16:55 pm



Título: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 16:55 pm
Venga, otro reto para quienes nos gusta llevarlo todo al extremo :P

Esta vez se trata de factorizar enteros :) Tan sencillo como eso :P

Ha de devolver un Array con todos los factores del numero que reciba desde un input() ;)

Suerte a todos :D


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 17:52 pm
La version funcional que tengo ahora tiene 101 bytes (Contando los saltos de linea como 2 bytes (\r\n)) :)

A ver si se anima alguien ;)


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: [L]ord [R]NA en 11 Enero 2011, 18:12 pm
:xD seguramente no pensaste de mala manera al dar titulo... xDDD pero yo si.

Código
  1. b=input()
  2. a=[]
  3. for i in range(1,b):
  4.    if b%i==0:a.append(i)
  5. print a


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 18:22 pm
Tu codigo no sirve... Por ejemplo, al factorizar 12 deberia dar 2,2,3 ;)

Y si, el titulo es adrede :P


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Novlucker en 11 Enero 2011, 18:31 pm
:¬¬ Pensé que tenía uno mucho más corto, pero resulta que es más largo, me voy a tomar mi tiempo :¬¬
Por cierto Karcrack, que te devuelve si metes un 11? :P

Saludos


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 21:10 pm
Citar
>>>
11
[11]

El 11 es primo... asi que esta bien factorizado :rolleyes:


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Novlucker en 11 Enero 2011, 21:35 pm
Es que quería ver si no te daba el problema que tenía yo, cosa por lo cual el code quedaba más largo :¬¬
Lo dicho, me voy a tomar mi tiempo :¬¬

Saludos


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 21:45 pm
Que te devuelve con el 1? Debe devolver un array vacio []
 :)


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Novlucker en 11 Enero 2011, 22:04 pm
Y lo hace, pero son 138 bytes, así que hay mucho para recortar :-X


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: ukol en 11 Enero 2011, 22:20 pm
Yo no logro bajar de 122, ufff que oxidado anda el python, aparte me saca unos por medio pero bueno eso vale no? los 1 son factores primos, convencion matematica(porque conviene)... si tuviera que quitarle los unos añadele otros 15bytes tal vez

Luego lo miro más.


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: [L]ord [R]NA en 11 Enero 2011, 22:54 pm
tengo en mi IDE que las tabulaciones las coloque como 4 espacios, aqui como contaremos las tabulaciones, como espacios o como "/t"?


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 22:58 pm
Yo las he contado como 4 bytes, ya que el IDE del Python mete 4 espacios por tabulacion... Pero si preferis contamos como 1 solo byte y punto ;)

Contemos de esta forma:
Salto de linea = 2 bytes
Tabulacion = 1 byte

PD: Eso deja mi codigo en 83bytes :P


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: [L]ord [R]NA en 11 Enero 2011, 23:01 pm
:xD no... contemos como 4, psss... me paso con aprox. 13bytes.


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 23:05 pm
Contamos como 1, ya que se puede meter un \t que seria un byte...


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Novlucker en 11 Enero 2011, 23:06 pm
1 las tabulaciones y 2 los saltos de línea, como si estuviesemos todos en Win :P

Saludos


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: [L]ord [R]NA en 11 Enero 2011, 23:08 pm
Aqui mi code:

Código
  1. a,i,b=[],2,input()
  2. while(b>i-1):
  3.    if b%i==0:
  4.        a+=[i]
  5.        b/=i
  6.        i-=1
  7.    i+=1
  8. print a


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 23:13 pm
Buen code :D
Mi codigo se parece mucho :) Pero tiene 7 bytes menos :P

Aqui lo dejo:
Código
  1. r,n,x=[],input(),2
  2. while x<=n:
  3.    while n%x==0:
  4.        r+=[x]
  5.        n/=x
  6.    x+=1
  7. print r
81bytes :)


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: [L]ord [R]NA en 11 Enero 2011, 23:21 pm
:xD no pense en anidar otro while... tendrian el mismo tamaño... al final lo deje:

Código
  1. a,i,b=[],2,input()
  2. while(b>=i):
  3.    if b%i==0:
  4.        a+=[i]
  5.        b/=i
  6.        i-=1
  7.    i+=1
  8. print a

osea 87bytes... no creo que se reduzca a menos de 81bytes, esta en la minima expresion.


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 23:24 pm
@RNA: Podrias quitarte un byte si pusieses while b>=i: ;)


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: [L]ord [R]NA en 11 Enero 2011, 23:35 pm
:xD pero entonces seria identico al tuyo.


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 11 Enero 2011, 23:38 pm
Tengo una forma de hacerlo muchisimo mas corto, pero me la guardo en plan sorpresa para despues de que todos hayan puesto la suya :P

Espero que nadie me chafe la sorpresa :¬¬

Olvidadlo, no funciona bien :(


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: ukol en 11 Enero 2011, 23:59 pm
la mia 115 bytes, pero veo que yo iba por otro camino(sin saltos de línea):
Código
  1. n,r,p=input(),range(1,n),[x for x in r[1:] if sum([x%d<1 for d in r[1:]])<2]
  2. [x for x in p for y in r if n%x**y<1]
  3.  

Y la primera que hice(con los unos por medio)... no os quiero asustar pero ahi va a ver quien la entiende xD
Código
  1. n=input()
  2. g=lambda l:len(l)and[l[0]]+g([y%l[0]and y or y/l[0]for y in l[1:]])or[]
  3. g(filter(lambda x:n%x<1,range(2,n+1)))
  4.  
:rolleyes:


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Novlucker en 12 Enero 2011, 00:42 am
Código
  1. z,r=input(),[]
  2. for x in range(2,z+1):
  3.    while z%x==0:
  4.        z/=x
  5.        r+=x,
  6. print r
Es muy parecido, parece que hubiese copiado :¬¬


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: [L]ord [R]NA en 12 Enero 2011, 14:18 pm
Código
  1. z,r=input(),[]
  2. for x in range(2,z+1):
  3.    while z%x==0:
  4.        z/=x
  5.        r+=x,
  6. print r
Es muy parecido, parece que hubiese copiado :¬¬

:¬¬ copiaste?


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 12 Enero 2011, 14:22 pm
Muy interesante lo de r+=x, ahi te ahorras un caracter que hace que ganes por ahora, con 80 caracteres :)

Voy a ver si puedo bajar de 80 :rolleyes:


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Novlucker en 12 Enero 2011, 14:24 pm
Bueno, si le quitas los parentesis rectos al tuyo también quedas con 80 :xD


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 12 Enero 2011, 14:29 pm
76!! caracteres bytes :)
Código
  1. r,n,x=[],input(),2
  2. while x<=n:
  3. while n%x==0:n,r=n/x,r+[x]
  4. x+=1
  5. print r
:D


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Novlucker en 12 Enero 2011, 14:50 pm
;-) Eso no se me había ocurrido, ya estoy buscando el próximo reto :P

Saludos


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: mr.blood en 12 Enero 2011, 15:30 pm
***** Karcrack, posteaste el codigo antes que yo, teniamos lo mismo, solo que yo estaba comiendo xD.

Código
  1. f,l,i=2,[],input()
  2. while i>1:
  3. while not i%f:i/=f;l+=[f]
  4. f+=1
  5. print l
  6.  

Ya intente utilizar Filter y Map, pero no pude conseguir nada "corto" :P.

Sa1uDoS, espero el proximo reto, estan muy divertidos :D


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 12 Enero 2011, 15:44 pm
Tu codigo es mas corto mr.blood :) Aunque a mi eso de usar ; me parece un poco trampa :P

El tuyo son 74 bytes... lo he modificado un poco y lo he dejado en 72 :P
Código
  1. f,l,i=2,[],input()
  2. while i>1:
  3. while i%f==0:i/=f;l+=f,
  4. f+=1
  5. print l


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: mr.blood en 12 Enero 2011, 15:48 pm
Tu codigo es mas corto mr.blood :) Aunque a mi eso de usar ; me parece un poco trampa :P

El tuyo son 74 bytes... lo he modificado un poco y lo he dejado en 72 :P
Código
  1. f,l,i=2,[],input()
  2. while i>1:
  3. while i%f==0:i/=f;l+=f,
  4. f+=1
  5. print l

Jaja, ni me habia dado cuenta, porque conte el ultimo salto de linea :P.

Porque te parece trampa, Python lo da, asi que es valido :P.

¬¬ Modificaste mi codigo ¬¬.

Creo que eso es insuperable, pero vere si puedo hacer algo mas.

Sa1uDoS


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: Karcrack en 12 Enero 2011, 15:53 pm
Nah, solo es que no me gusta, no es trampa ni mucho menos ;) Por ahora eres el ganador, aunque yo le haya quitado 2 bytes a tu code :laugh:


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: thefalas en 13 Enero 2011, 22:24 pm
Buenas, lo máximo que he logrado han sido 82 bytes
Código
  1. a,b,n=[],input(),2
  2. while n<=b:
  3. if b%n==0:b=b/n;a.append(n)
  4. else:n+=1
  5. print a
  6.  

PD: soys unos cracks, 72 bytes... :D
EDIT: ¿como haceis para resaltar el código?


Título: Re: [RETO+Python] A ver quien la tiene mas corta... (v2)
Publicado por: mr.blood en 14 Enero 2011, 15:15 pm
Jeje, con el segundo while acortas codigo :D.

Para poner el codigo resaltado usa el GeSHi osea, pones
Código
  1.  
[/b] por ejemplo para Python
Código
  1. print "Hola"
.

Sa1uDoS