Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion iter_bug/fib.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@ def __iter__(self):

def next(self):
next_fib = self.last_1 + self.last_2
self.last_1, self.last2 = self.last_2, next_fib
self.last_1, self.last_2 = self.last_2, next_fib
return next_fib
2 changes: 1 addition & 1 deletion iter_bug/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ def test2():
i.next()
assert i.next() == 3

def test2():
def test3():
f = fib.fib()
i = iter(f)
i.next()
Expand Down
10 changes: 10 additions & 0 deletions sieve_gen/example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import sieve

count = 1

for n in sieve.primes():
print n
count += 1
if count > 10:
break

22 changes: 22 additions & 0 deletions sieve_gen/sieve.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# an implementation of Eratosthenes' Sieve as a generator

def _is_prime(primes, n):
for i in primes:
if n % i == 0:
return False
return True

def primes():
# first iteration, return 2 as the first prime number
primeslist = [2]
yield 2

# subsequent iterations build off of previously determined primes
start = primeslist[-1] + 1
while 1:
if _is_prime(primeslist, start):
primeslist.append(start)
yield start

start += 1

6 changes: 6 additions & 0 deletions sieve_gen/test1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import sieve

# test 1 - the first prime should be 2
gen = sieve.primes()
assert gen.next() == 2

9 changes: 9 additions & 0 deletions sieve_gen/test2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import sieve

# test 2 - the fourth prime should be 7 - happy :)
gen = sieve.primes()
gen.next()
gen.next()
gen.next()
assert gen.next() == 7

10 changes: 10 additions & 0 deletions sieve_gen/test3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import sieve

# test 3 - there are 10 primes less than 30
count = 0
gen = sieve.primes()
while gen.next() < 30:
count += 1

assert count == 10

10 changes: 10 additions & 0 deletions sieve_iter/example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import sieve

count = 1

for n in sieve.primes():
print n
count += 1
if count > 10:
break

27 changes: 27 additions & 0 deletions sieve_iter/sieve.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# an implementation of Eratosthenes' Sieve as an iterator

class primes(object):
def __init__(self):
self.primeslist = []

def __iter__(self):
return self

def _is_prime(self, n):
for i in self.primeslist:
if n % i == 0:
return False
return True

def next(self):
if len(self.primeslist) == 0:
self.primeslist.append(2)
return 2

self.start = self.primeslist[-1] + 1
while 1:
if self._is_prime(self.start):
self.primeslist.append(self.start)
return self.start
self.start += 1

6 changes: 6 additions & 0 deletions sieve_iter/test1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import sieve

# test 1 - the first prime should be 2
gen = sieve.primes()
assert gen.next() == 2

9 changes: 9 additions & 0 deletions sieve_iter/test2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import sieve

# test 2 - the fourth prime should be 7 - happy :)
gen = sieve.primes()
gen.next()
gen.next()
gen.next()
assert gen.next() == 7

10 changes: 10 additions & 0 deletions sieve_iter/test3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import sieve

# test 3 - there are 10 primes less than 30
count = 0
gen = sieve.primes()
while gen.next() < 30:
count += 1

assert count == 10

5 changes: 5 additions & 0 deletions sieve_mod/example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import sieve

for n in range(10):
print sieve.next()

25 changes: 25 additions & 0 deletions sieve_mod/sieve.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# an implementation of Eratosthenes' Sieve in a module

_primeslist = []

def _is_prime(primes, n):
for i in primes:
if n % i == 0:
return False
return True

def next():
# first iteration, add 2 as a prime number
if len(_primeslist) == 0:
_primeslist.append(2)
return 2

# subsequent iterations build off of the previously determined list
start = _primeslist[-1] + 1
while 1:
if _is_prime(_primeslist, start):
_primeslist.append(start)
return start

start += 1