import numpy as np from collections import Counter rng=np.random.default_rng(151) cp=(0,1,1,1,1,1); p=6 def row(u,K): T=len(u)*p; d=[cp[t%p] for t in range(T+K+2)] e=[(u[t//p] if t%p==0 else (1 if t%p==5 else 0)) for t in range(T)] prev,cur=d[:T],e; out=[cur[0]] for k in range(1,K): nxt=[cur[t+1]^(cur[t]|prev[t]) for t in range(len(cur)-1)]; prev,cur=cur,nxt; out.append(cur[0]) return out def forced_tail(prefix,nu,K): u=list(prefix) while len(u)0 and alt(tail[j-1:]): j-=1 res["ends in the alternating tail"]+=1; onset.append(j) else: res["does not end alternating"]+=1 print(dict(res)) if onset: print(f"alternation starts within {min(onset)}-{max(onset)} lanterns into the tail (median {int(np.median(onset))})")