Hofstadter Figure-Figure sequences: Difference between revisions

m (→‎version 1: added a "click here" link.)
Line 1,556:
Ok</lang>
 
===Generator with caching===
Output is the same as above.
<lang python>from itertools import islice, tee, chain
try:
from itertools import izip, imap
except:
izip, imap = zip,map
 
# Keep tee'ing the existing generator to use its caching mechanism
# This matters when doing large slices
def R(f = [0]):
def r():
yield(1);
for x,y in izip(S(), R()): yield(x+y)
 
f[0], g = tee(f[0] if f[0] else r())
return g
 
def S():
y = 0
for x in R():
for i in range(y + 1, x): yield(i)
y = x + 1
yield(y)
 
def take(g, size): return list(islice(g(), size))
 
print(take(R, 10))
print(["Not ok", "Ok"][set(take(R, 40) + take(S, 960)) == set(range(1,1001))])</lang>
 
===Using cyclic iterators===
Anonymous user