Klarner-Rado sequence: Difference between revisions

Content added Content deleted
(→‎Ksh: add)
(→‎fast unbounded generator: save some memory by letting tee() handle the queue)
Line 948: Line 948:


===fast unbounded generator===
===fast unbounded generator===
<syntaxhighlight lang="python">from collections import deque
<syntaxhighlight lang="python">from itertools import islice, tee
from itertools import islice


def klarner_rado():
def klarner_rado():
m2 = m3 = 1
def gen():
q2, q3 = deque(), deque()
m2 = m3 = 1
while True:
while True:
m = min(m2, m3)
m = min(m2, m3)
yield m
yield m
q2.append(m)
if m2 == m: m2 = next(g2) << 1 | 1
if m2 == m: m2 = q2.popleft() << 1 | 1
if m3 == m: m3 = next(g3) * 3 + 1
q3.append(m)
g, g2, g3 = tee(gen(), 3)
return g
if m3 == m: m3 = q3.popleft() * 3 + 1


kr = klarner_rado()
kr = klarner_rado()