Tim Hochberg wrote: > Shane Hathaway wrote: >> Andrew Durdin wrote: >> >>> On 12/28/05, Shane Hathaway <[EMAIL PROTECTED]> wrote: >>> >>> >>>> I just found a 125 character solution. It's actually faster and more >>>> readable than the 133 character solution (though it's still obscure.) >>> >>> Having spent a good deal of time and effort, and not getting below 144 >>> characters, I am now very eager to see how these shorter versions >>> work, particularly the 6 120-character solutions. I also expect that >>> someone (I'll certainly give it a try) will produce a yet shorter >>> version after the contest closes, based on the knowledge from the >>> winning solutions. >> >> Roberto Alsina fully documented his 120 byte solution here: >> >> http://www.pycs.net/lateral/weblog/2005/12/29.html#P333 >> >> My 120 byte solution is equivalent. Many others probably did the same >> thing. Python's philosophy of one way to do it seems to be leading us >> all down the same road. >> >> However, it still feels like there's room for improvement. I have a 123 >> byte solution based on a fairly repetitive 21 character string; if I >> could compress the representation of the string, it could win. > > Apparently there was as someone put out a 119 byte solution. I can't get > to Roberto's code at present (perhaps he's suffering a bandwidth > crisis?), but it seems that my 120 character solution is different. It > sounds like he encoded his as a row at a time and did two loops one for > each character and one for each row. I encoded the data per character > and did three loops one per column, one per character and one per row. > I'm sure that's not clear, so here's the code: > > g=''.join;seven_seg=lambda i:g( > g(' _|x|'[ord("~$]m'k{d\x7fo"[int(n)])>>s&j] > for n in i for j in(2,1,4))+'\n'for s in(6,0,3)) > > I've replaced the unprintable characters and added some preemptive > linebreaks so that hopefully this won't get too munged. It's all clear > now, right? Two hints: 6,0,3->row, 2,1,4->column and the 6 and 1 have to > be where they are to exploit the property that the top row only ever has > a center character in it. That way things can be encoded in 7-bits and > fit in a character string that Python likes. The order of the other loop > indices is mostly accidental but not all permutations may work. > > I'm off to try to figure out how to do it the other way now, before the > code gets revealed. > > > -tim > -tim > > Mine was practically identical, but with another permutation of the loop variables:
seven_seg=lambda n,s="".join:s( s(" _| |"[ord('w\x12][:koR\x7f{'[int(i)])>>r&j] for i in n for j in(4,1,2))+"\n"for r in(6,3,0)) More evidence that 'there is one obvious way to do it' ;-) Still curious about 119, though Michael -- http://mail.python.org/mailman/listinfo/python-list