Test Foro de elhacker.net SMF 2.1

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 (python) [Seleccionar]

b=input()
a=[]
for i in range(1,b):
    if b%i==0:a.append(i)
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 (python) [Seleccionar]
a,i,b=[],2,input()
while(b>i-1):
    if b%i==0:
        a+=[i]
        b/=i
        i-=1
    i+=1
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 (python) [Seleccionar]
r,n,x=[],input(),2
while x<=n:
    while n%x==0:
        r+=[x]
        n/=x
    x+=1
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 (python) [Seleccionar]

a,i,b=[],2,input()
while(b>=i):
    if b%i==0:
        a+=[i]
        b/=i
        i-=1
    i+=1
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 (python) [Seleccionar]

n,r,p=input(),range(1,n),[x for x in r[1:] if sum([x%d<1 for d in r[1:]])<2]
[x for x in p for y in r if n%x**y<1]


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 (python) [Seleccionar]

n=input()
g=lambda l:len(l)and[l[0]]+g([y%l[0]and y or y/l[0]for y in l[1:]])or[]
g(filter(lambda x:n%x<1,range(2,n+1)))
: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 (python) [Seleccionar]
z,r=input(),[]
for x in range(2,z+1):
    while z%x==0:
        z/=x
        r+=x,
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
Cita de: Novlucker en 12 Enero 2011, 00:42 AM
Código (python) [Seleccionar]
z,r=input(),[]
for x in range(2,z+1):
    while z%x==0:
        z/=x
        r+=x,
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 (python) [Seleccionar]
r,n,x=[],input(),2
while x<=n:
while n%x==0:n,r=n/x,r+[x]
x+=1
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 (python) [Seleccionar]
f,l,i=2,[],input()
while i>1:
while not i%f:i/=f;l+=[f]
f+=1
print l


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 (python) [Seleccionar]
f,l,i=2,[],input()
while i>1:
while i%f==0:i/=f;l+=f,
f+=1
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
Cita de: 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 (python) [Seleccionar]
f,l,i=2,[],input()
while i>1:
while i%f==0:i/=f;l+=f,
f+=1
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 (python) [Seleccionar]

a,b,n=[],input(),2
while n<=b:
if b%n==0:b=b/n;a.append(n)
else:n+=1
print a


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 (lenguaje) [Seleccionar]
[/b] por ejemplo para Python
Código (python) [Seleccionar]
print "Hola".

Sa1uDoS