SimplePrograms challenge

Steven Bethard steven.bethard at gmail.com
Tue Jun 12 19:09:23 EDT 2007


Steve Howell wrote:
> --- George Sakkis <george.sakkis at gmail.com> wrote:
>> from itertools import count, ifilter
>> def sieve():
>>     seq = count(2)
>>     while True:
>>         p = seq.next()
>>         seq = ifilter(p.__rmod__, seq)
>>         yield p
[snip]
> Is there a way to broaden the problem somehow, so that
> it can be a longer solution and further down on the
> page, and so that I can continue to enforce my
> somewhat arbitrary rule of ordering examples by how
> long they are?

How about we just comment it better?

import itertools

def iter_primes():
     # an iterator of all numbers between 2 and +infinity
     numbers = itertools.count(2)

     # generate primes forever
     while True

         # generate the first number from the iterator,
         # which should always be a prime
         prime = numbers.next()
         yield prime

         # lazily remove all numbers from the iterator that
         # are divisible by prime we just selected
         numbers = itertools.ifilter(prime.__rmod__, numbers)

I think that's 17-ish, though you could shrink it down by removing some 
of the spaces.

STeVe



More information about the Python-list mailing list