def S2(z): off={'S':u,'I':-u/3,'Q':-u/2}[z['T']] x2=cl(z['x']-(-off),0,xm) sc=SC(x2,z['e']) if z['T']==prev: sc=sc-(-0.01) return {'n':z['n'],'T':z['T'],'x1':z['x'],'x2':x2,'c2':CL(x2),'ad':AD(z['T'],x2),'s':sc,'res':z.get('res',0)} ev=[S2(z) for z in short] order=list(ev) nons=[] pool=[z for z in ev if z['ad']] if len(ads)>0 and any(not z['ad'] for z in ev): for z in ads[2:]: zz=S2(z) order.append(zz) nons.append(zz) if zz['ad']: pool.append(zz) break if len(ads)==0: win=ev[0] v=0 elif pool: win=sorted(pool,key=lambda z:(-z['s'],z['n']))[0] v=0 if win['n']==lead['n'] else 1 else: win=None v=1 for z in ev: print('S2',z['n'],z['T'],'x1',round(z['x1'],8),'x2',round(z['x2'],8),'c2',z['c2'],'ad',z['ad'],'s',round(z['s'],8),'res',z['res']) for z in nons: print('NS',z['n'],z['T'],'x1',round(z['x1'],8),'x2',round(z['x2'],8),'c2',z['c2'],'ad',z['ad'],'s',round(z['s'],8)) if win is None: print('NOWIN') break lead2=S2(lead) pn=len(nons) idx=next(i for i,z in enumerate(order) if z is win) pf=sum(1 for z in order[:idx] if not z['ad']) psf=sum(1 for z in ev if not z['ad']) p=pn print('WIN',win['n'],win['T'],'score',win['s'],'v',v,'pns',pn,'pf',pf,'psf',psf,'p',p,'lead',lead['n'],'leadc2',lead2['c2']) bp=round(win['s'],3)>=t print('PASS',bp,'rounded',round(win['s'],3),'t',t) T=win['T'] if T=='S': q=q-(-u/3) elif T=='I': q=q-u/5 else: q=q-u/4 if p==1: q=q-(-u/10) elif p>=2: q=q-u/10 q=cl(q,-0.08,0.08) cnt=sum([1 if v==1 else 0,1 if T=='Q' else 0,1 if p==1 else 0]) inc=1 if (bp and cnt==1) else 2 h=(h-(-inc))%3 prev=T print('END',q,h,prev) run()