Jj's web stream

Pycontest

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 variable f() para ahorrar espacio. Quizas usando labmda

  • 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

Q_NERD: ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ...