Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Fun and games with lambda

31 views
Skip to first unread message

Steven D'Aprano

unread,
Jun 17, 2011, 12:10:21 PM6/17/11
to
If you've ever wondered what lambda and reduce are good for, run this one-
liner and wonder no more...

(Be patient, it may take a few seconds to return.)

# Python 2 version:

print((lambda f:((lambda p:p[0]+'.'+p[1:])(str((lambda Q:2*Q[0]*Q[0]//Q
[3])((lambda F:(lambda S:f(lambda T,_:((T[0]+T[1])//2,S((T[0]*T[1])//
F),2*T[2],(T[3]-(T[2]*(((T[0]+T[1])//2)**2-(S((T[0]*T[1])//F))**2))//F)),
[0]*13,(F,(F*F)//S(2*F),2,F//2)))(lambda n:f(lambda x,_:(x-x//2+(n*F)//
(2*x)),[0]*15,n//2)))(10**(5010))))[:5000])))(reduce))

# Python 3 version:

print((lambda f:((lambda p:p[0]+'.'+p[1:])(str((lambda Q:2*Q[0]*Q[0]//Q
[3])((lambda F:(lambda S:f(lambda T,_:((T[0]+T[1])//2,S((T[0]*T[1])//
F),2*T[2],(T[3]-(T[2]*(((T[0]+T[1])//2)**2-(S((T[0]*T[1])//F))**2))//F)),
[0]*13,(F,(F*F)//S(2*F),2,F//2)))(lambda n:f(lambda x,_:(x-x//2+(n*F)//
(2*x)),[0]*15,n//2)))(10**(5010))))[:5000])))(__import__
('functools').reduce))


I can't take credit for this little beauty. It originally came from
Manuel Garcia, all I did was make it compatible with Python 3 and add
some additional, but trivial, obfuscation.

See the original post here:
http://web.archiveorange.com/archive/v/5H3d1yQN5N15HEgOWHMx

Encouraging-hatred-of-lambdas-for-fun-and-profit-ly y'rs,


--
Steven

Wolfgang Rohdewald

unread,
Jun 17, 2011, 12:56:45 PM6/17/11
to pytho...@python.org, Steven D'Aprano
On Freitag 17 Juni 2011, Steven D'Aprano wrote:
> run this one-
> liner and wonder no more...

looks like something dangerous to me. What does
it do? rm -rf ?

--
Wolfgang

Ian Kelly

unread,
Jun 17, 2011, 1:07:44 PM6/17/11
to wolf...@rohdewald.de, pytho...@python.org
On Fri, Jun 17, 2011 at 10:56 AM, Wolfgang Rohdewald
<wolf...@rohdewald.de> wrote:
> On Freitag 17 Juni 2011, Steven D'Aprano wrote:
>> run this one-
>> liner and wonder no more...
>
> looks like something dangerous to me. What does
> it do? rm -rf ?

The thread at the link discusses what it does in great detail.

Mark Dickinson

unread,
Jun 17, 2011, 3:02:03 PM6/17/11
to
On Jun 17, 5:10 pm, Steven D'Aprano <steve

+comp.lang.pyt...@pearwood.info> wrote:
>
> print((lambda f:((lambda p:p[0]+'.'+p[1:])(str((lambda Q:2*Q[0]*Q[0]//Q
> [3])((lambda F:(lambda S:f(lambda T,_:((T[0]+T[1])//2,S((T[0]*T[1])//
> F),2*T[2],(T[3]-(T[2]*(((T[0]+T[1])//2)**2-(S((T[0]*T[1])//F))**2))//F)),
> [0]*13,(F,(F*F)//S(2*F),2,F//2)))(lambda n:f(lambda x,_:(x-x//2+(n*F)//
> (2*x)),[0]*15,n//2)))(10**(5010))))[:5000])))(reduce))

Very nice, but a little unnatural. Can't you find room to stick an
extra factor of 2 in there somewhere?

(See also: http://bugs.python.org/issue12345 )

--
Mark

Chris Angelico

unread,
Jun 17, 2011, 8:40:37 PM6/17/11
to pytho...@python.org
On Sat, Jun 18, 2011 at 2:10 AM, Steven D'Aprano
<steve+comp....@pearwood.info> wrote:
> If you've ever wondered what lambda and reduce are good for, run this one-
> liner and wonder no more...
>
> (Be patient, it may take a few seconds to return.)

I have a decent CPU so it's not too bad. And the precision produced is
noteworthy. However, I have no idea how it does its work, so I'm just
in awe of the quality of the code.

And you can read that last remark either way.

ChrisA

0 new messages