import itertools, time from collections import Counter from orfactor import rebuild t0=time.time() for w in range(26,35,2): nfree=sum(1 for n in range(0,40) if 2*n+2<=w) offs=Counter(); K=w+40 for hb in itertools.product((0,1),repeat=nfree): h=list(hb); dead=None while dead is None and 2*len(h)+2<=K: for v in (0,1): # force the next free bit so that the next even lantern is dark b=rebuild(h+[v,0],2*len(h)+4) if b[2*len(h)+1]==0: h=h+[v]; break b=rebuild(h+[0],2*len(h)+1) for k in range(w+1,len(b)+1): if b[k-1]==1: dead=k; break offs[(dead-w) if dead else "survived to K"]+=1 num=[k for k in offs if k!="survived to K"]; print(f"width {w:2d}: {2**nfree:6d} branches; latest death {max(num)} lanterns past the edge; survivors to K: {offs.get(chr(115)+"urvived to K",0)} [{time.time()-t0:.0f}s]",flush=True) if time.time()-t0>230: break