## Sugar Pie

**Question:** in the code snippet bleow, what does the result stream, `rs`

, approximate?

from itertools import count, ifilter, izip from random import random as xy from math import hypot pt = lambda: (xy(), xy()) on = ifilter(lambda n: hypot(*pt()) < 1., count(1)) rs = (4. * j / i for i, j in izip(on, count(1)))

The code isn’t wilfully obscure but I’ll admit it’s unusual. Although written in a functional style, the source of the stream, `pt`

, is utterly impure, generating a sequence of random results: it sprinkles points in a unit square. Despite this random input the results stream always tends to the same value. Well, in theory it should!

Here’s a picture of a round pie on a square baking tray being dusted with sugar.

Thanks again to Marius Gedminas for pointing me at
`math.hypot`

, the best way to find the length of a 2D vector. (The
previous version of this note used `abs(complex(*pt())`

, which it
claimed to be better than `math.sqrt(x * x + y * y)`

).