Printing a Chunk Of Words

Thomas Jollans tjol at tjol.eu
Wed Sep 27 08:58:59 EDT 2017


On 2017-09-27 13:51, Matt Wheeler wrote:
> With deepest apologies to all involved...
> 
> On Tue, 26 Sep 2017 at 08:42 Gregory Ewing <greg.ewing at canterbury.ac.nz>
> wrote:
> 
>> Ben Bacarisse wrote:
>>> Think functional!  This is 257 characters:
>>
>> 250 chars, 17 shorter than the text it produces:
>>
>> a=[];o=[];n=[];A=list.append
>> for b in range(3,-1,-1):
>>   x=bool(b>>1);y=bool(b&1);A(a,"%s and %s is %s"%(x,y,x and y));A(o,"%s or
>> %s is
>> %s"%(x,y,x or y))
>>   if x:A(n,"not %s is %s"%(y,not y))
>> print("    Boolean Operators\n"+"-"*24+"\n"+"\n".join(a+o+n))
>>
> 
> Cutting the same (quite reasonable) corners as you, I've got it down 212
> characters:
> 
> t,f,a,o,n='True','False','and','or','not'
> l=["     Boolean Operators\n"+"-"*24]
> for x in [(l,p,r)for p in(a,o)for l in(t,f)for r in(t,f)]+[(n,t),(n,f)]:x='
> '.join(x);l+=[x[0].upper()+x[1:]+" is "+str(eval(x))]
> for i in 12,9,5,0:l.insert(i,'')
> print('\n'.join(l))
> 
> Reproducing the original string exactly the best I've managed is 260:
> 
> t,f,a,o,n='True','False','and','or','not'

The Not is capitalized in the original string.

> l=["     Boolean Operators\n"+"-"*24]
> for x in [(l,p,r)for p in(a,o)for l in(t,f)for r in(t,f)]+[(n,t),(n,f)]:x='
> '.join(x);l+=[x[0].upper()+x[1:]+" is "+str(eval(x))]
> for i in 12,9,5,0:l.insert(i,'')
> print('\n'.join(l))



More information about the Python-list mailing list