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 :-P
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])
Comments
#90" title="2006-01-03 03:13:55">Q_NERD: ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ...