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])

1 Comment so far

  1. Q_NERD

    January 3rd, 2006

    ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ…


Add yours

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>