Pycontest
Pycontest, es un concurso que busca obtener la solución mas pequeña al problema de convertir un número dado a un formato de display de 7 leds.
“31415″ se vería algo asi:
_ _ _| ||_| ||_ _| | | | _|
El premio es un teclado!.
Mi código tiene 185 caracteres con lo que me pone en puesto 194(al momento que lo envié), aquí está:
def seven_seg(x): return "".join(["".join([[' _|',' ','|_ ','| |',' _ ','|_|',' |'][int("435166402400156420425466455450"[3*int(j):3*int(j)+3][i])] for j in x])+"\n" for i in 0,1,2])
Ahora que lo veo y lo pienso con calma se me ocurren algunas mejoras que se le pocrían hacer para ocupar menos espacio:
- Podría hacerlo mas corto si lo hiciera recursivamente,
seven_seg("801") = seven_seg("8")+seven_seg("01")o algo por ahi, asignar la función a una variablef()para ahorrar espacio. Quizas usandolabmda - Se debe comprimir mi numero “435166402400156420425466455450″ a alguna base mayor (36) para que ocupe menos espacio. Ahorraría unos 10 bytes
- Comprimir el número en caractéres no ASCII(almacenar en los bytes) para ocupar menos espacio podría ayudar, usar
ord("numero"[n]). Ése número de 30 bytes es demasiado grande debería ocupar sólo 10. - Podría reordenar el arreglo
[' _|',' ','|_ ','| |',' _ ','|_|',' |']para evitar muchos caracteres que se repiten y usarlo como un solo string, ahorraría 18 bytes en las comas y apóstrofes mas unos cuantos bytes extra.
El concurso termina hoy así que no le dediqué mas tiempo a pensarlas e implementarlas
En realidad convertir el número a base 36 no ahorra tanto espacio, debido a las funciones int(s,36) y str() que habría que usar. Acabo de convertir el número y salio 166ucclerfg2crw6zdlm
El actual ganador tiene un código de 119 bytes!
Ya es muy tarde para enviarlo nuevamente, pero tengo una pequeña mejora, como 10 bytes menos:
def seven_seg(x): return "".join(["".join([[' _|',' ','|_ ','| |',' _ ','|_|',' |'][int("435166402400156420425466455450"[3*int(j)+i])] for j in x])+"\n" for i in 0,1,2])


Q_NERD
January 3rd, 2006
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ…