[RETO+Python] Buscando rangos

Iniciado por Novlucker, 12 Enero 2011, 15:12 PM

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

Novlucker

He aquí un nuevo reto a ver quién lo tiene más corto >:D

El input del programa será una lista de números mayores a 0 ordenados y separados por espacios.
El script debe de encontrar rangos de números consecutivos y agruparlos, y dejar los que no estan consecutivos separados.
El output serán esos rangos separados por coma y espacio.

Ej:
INPUT: 1 2 5 8 9 10 11 18
OUTPUT: 1-2, 5, 8-11, 18

INPUT: 3 6 9 10 12 13
OUTPUT: 3, 6, 9-10, 12-13


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

mr.blood

Una pregunta, meter los datos desordenados no valdria no ??? ;).

Sa1uDoS

Novlucker

No, los datos se ingresan ordenados y se considera que se mete una muestra "buena", así que no es necesario verificar nada. Además eso se arreglaría con un simple sort,por eso directamente lo he obviado.

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

Me apunto >:D

Por cierto, se devuelve una cadena de texto, no?

Novlucker

Exacto, imprimir una cadena. Yo por ahora tengo un código funcional pero me resulta muy largo, y se que se puede hacer más corto, así que voy a ver si tomo las cosas por otro lado :P

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

ukol

Jaja me gustan estos retos  :D
No he contado pero ahi va el mio, en mi estilo ONE-LINE
la entrada va en l, no la he recogido, voy a cenar ya no tengo tiempo
ME ha costado un buen rato, depurar cosas de 1 linea es superchungo
Código (python) [Seleccionar]

for i in reduce(lambda l,x:l[:-1]+[l[-1]+[x][x-l[-1][-1]-1:]]+[[x]][:x-l[-1][-1]-1],l[1:],[l[0:1]]):print str(i[0])+(len(i)-1 and'-'+str(i[-1])or''),',',

con
l=[1,3,5,6,7,8,10,13,14,17]
output
1 , 3 , 5-8 , 10 , 13-14 , 17 ,
Cuente Cuente, son 3 ojos! (no sé cuantos bytes  :laugh:)

Karcrack

Ukol, no estas cumpliendo los requisitos del reto! Has de recibir una cadena de numeros separados por espacios...

Novlucker

Eso mismo, y la salida debe de ser número->coma->espacio->otra vez :P
154 bytes, pero te falta el input :P

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

#8
Lo minimo que he conseguido, cumpliendo todas las reglas del reto, han sido 153 bytes :-\
Código (python) [Seleccionar]
e,s=1,''
def m(x,y):
global e,s
if int(x)-int(y)-1:s+=y+', ';e=1
elif e:s+=y+'-';e=0
return 0
a=sorted(raw_input().split(),cmp=m)[-1];print s+a

Supongo que debe haber una forma mas simple, pero no se me ocurre :laugh:

Un saludo :D

Karcrack

Nadie mas? Uiiis.. que soso el reto :P