moon_aka_sun (
moon_aka_sun) wrote2006-01-28 09:05 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Семисегментный индикатор
http://www.pycontest.net/job/: Subject of the contest is to code the shortest possible python module that converts decimal numbers to the seven-segment display format.
>>> import seven_seg >>> print seven_seg.seven_seg('0123456789') _ _ _ _ _ _ _ _ | | | _| _||_||_ |_ ||_||_| |_| ||_ _| | _||_| ||_| _|
Постепенно пришёл от первоначальной версии в 209 символов...
def seven_seg(x): m=' _ $ $|_|$| |$ |$ _|$|_ '.split('$') p=q=r='' for d in x: s=ord("'a98S?<0 #"[int(d)])-16 p+=m[s//49] q+=m[s//7%7] r+=m[s%7] return p+"\n"+q+"\n"+r+"\n"...к 127 символьному однострочнику:
seven_seg=lambda x,j=''.join:j(j(" _ |_| |_ _|"[(ord("HjXYqRO9AD"[int(d)])-41)/i%7*2:][:3]for d in x)+'\n'for i in (49,7,1))
no subject
no subject
я думаю тут засчёт изменения двух строк можно ещё сократить, хотя для этого хорошо бы написать программу.
а другой вариант пока не получился - 104 получилось только.
PS:
о. только что сообразил немного развернуть функцию:
seven_089:{,/x}'+((3*!7)_" | _ _||_||_ | |")(0${(!3)_ x}'$87+_ic"Mq0.\231BC\r95")0$'
no subject