from collections import Counter,defaultdict from itertools import product,combinations from fractions import Fraction import hashlib def run(load,read,check): prior=[445,446,448,449,450,451,452,454,455,457,459,461,463,464,465,466] for n in prior: check(f'certificate_C{n}',hashlib.sha256(read(f'C{n}_DATA.json').encode()).hexdigest()==load(f'C{n}_CERTIFICATE.json')['data_sha256']) raw=load('C286_DATA.json')['target_register'] bases={'Noah birth':2841,'Noah death':1891,'Shem birth':2341,'Shem death':1741,'Flood start':2241,'Flood close':2240} generated=[] for t,role in product(['MT','SP','LXX'],bases): rails=[None] if t!='SP' or role.startswith('Flood') else ['primary','companion'] for rail,g,C,T,F in product(rails,range(1,4),range(2),range(2),range(2)): x=bases[role]+650*(t!='MT')+130*C+60*T+215*F+2*(g-1)-(rail=='companion') generated.append((t,role,rail,g,C,T,F,x)) def key(r):return(r['tradition'],r['role'],r.get('rail'),r['gear'],r['Cainan'],r['Terah60'],r['full430'],r['center']) check('independent_source_grid',Counter(generated)==Counter(map(key,raw))) check('source_base_excerpt','3491/3490' in read('File_18.md') and '1743/1741' in read('File_02.md')) X=sorted({r[-1] for r in generated});S=set(X);C=[3188,3190,3248,3250];P=sorted({c+s*432 for c in C for s in [-1,1]}) R=set();E=set() for x,y in product(X,repeat=2): if (x+y)%2==0 and (x+y)//2 in C:R.add((x,y,(x+y)//2)) hh=25*x-23*y if hh%2==0 and hh//2 in P:E.add((x,y,hh//2)) check('inverse_pivot_E_arrows',E=={(a['input'],a['output'],a['pivot']) for a in load('C450_DATA.json')['arrows']}) expectedR=set() for a in load('C446_DATA.json')['edges']: expectedR|={(a['lower'],a['upper'],a['center']),(a['upper'],a['lower'],a['center'])} check('sum_enumeration_R_arrows',R==expectedR) compR={(a,b,x,m,y) for x,m,a in R for m2,y,b in R if m==m2} check('reflection_compositions',compR=={(p['first_center'],p['second_center'],p['input'],p['intermediate'],p['output']) for p in load('C445_DATA.json')['complete_paths']}) compE={(a,b,x,m,y) for x,m,a in E for m2,y,b in E if m==m2} check('E_compositions',compE=={(p['first_pivot'],p['second_pivot'],*p['coordinates']) for p in load('C455_DATA.json')['complete_paths']}) kh=[] for a,b,x,m,y in sorted(compE): H=Fraction(25*a+23*b,48) check(f'displacement_{a}_{b}_{x}',H-x==Fraction(529*(x-y),96)) if H.denominator==1 and int(H) in S and H!=x and (H-x)%529==0:kh.append([a,b,x,m,y,int(H)]) check('unique_sourced_K_ladder',kh==[[3620,2756,2148,2020,1956,3206]]) buckets=defaultdict(list) for x in X:buckets[x%529].append(x) Kpairs={p for bucket in buckets.values() for p in combinations(bucket,2)} check('residue_bucket_K_pairs',Kpairs=={(p['lower'],p['upper']) for p in load('C454_DATA.json')['K_pairs']}) index={x:i for i,x in enumerate(X)};bits=[1<