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
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 ;)
:xD seguramente no pensaste de mala manera al dar titulo... xDDD pero yo si.
b=input()
a=[]
for i in range(1,b):
if b%i==0:a.append(i)
print a
Tu codigo no sirve... Por ejemplo, al factorizar 12 deberia dar 2,2,3 ;)
Y si, el titulo es adrede :P
:¬¬ 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
Citar>>>
11
[11]
El 11 es primo... asi que esta bien factorizado :rolleyes:
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
Que te devuelve con el 1? Debe devolver un array vacio []
:)
Y lo hace, pero son 138 bytes, así que hay mucho para recortar :-X
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.
tengo en mi IDE que las tabulaciones las coloque como 4 espacios, aqui como contaremos las tabulaciones, como espacios o como "/t"?
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
:xD no... contemos como 4, psss... me paso con aprox. 13bytes.
Contamos como 1, ya que se puede meter un \t que seria un byte...
1 las tabulaciones y 2 los saltos de línea, como si estuviesemos todos en Win :P
Saludos
Aqui mi code:
a,i,b=[],2,input()
while(b>i-1):
if b%i==0:
a+=[i]
b/=i
i-=1
i+=1
print a
Buen code :D
Mi codigo se parece mucho :) Pero tiene 7 bytes menos :P
Aqui lo dejo:
r,n,x=[],input(),2
while x<=n:
while n%x==0:
r+=[x]
n/=x
x+=1
print r
81bytes :)
:xD no pense en anidar otro while... tendrian el mismo tamaño... al final lo deje:
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.
@RNA: Podrias quitarte un byte si pusieses while b>=i: ;)
:xD pero entonces seria identico al tuyo.
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 :(
la mia 115 bytes, pero veo que yo iba por otro camino(sin saltos de línea):
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
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:
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 :¬¬
Cita de: Novlucker en 12 Enero 2011, 00:42 AM
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?
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:
Bueno, si le quitas los parentesis rectos al tuyo también quedas con 80 :xD
76!! caracteres bytes :)
r,n,x=[],input(),2
while x<=n:
while n%x==0:n,r=n/x,r+[x]
x+=1
print r
:D
;-) Eso no se me había ocurrido, ya estoy buscando el próximo reto :P
Saludos
***** Karcrack, posteaste el codigo antes que yo, teniamos lo mismo, solo que yo estaba comiendo xD.
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
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
f,l,i=2,[],input()
while i>1:
while i%f==0:i/=f;l+=f,
f+=1
print l
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
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
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:
Buenas, lo máximo que he logrado han sido 82 bytes
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?
Jeje, con el segundo while acortas codigo :D.
Para poner el codigo resaltado usa el GeSHi osea, pones
[/b] por ejemplo para Python print "Hola"
.
Sa1uDoS