#!/usr/local/bin/python3 from itertools import combinations L=(1,2,3,4,6,7,8,9,10,11,12,13) ORDER=(15,14,16,13,17,12,18,11,19,10,20,9,21) def csums(ps): d={0:1} for v in ps: vv=v if v<=9 else 10 nd=dict(d) for s in list(d): key=sum((s,vv)) nd[key]=sum((nd.get(key,0),d[s])) d=nd return d def seq2(ps): total=0 for ln in range(3,6): for idx in combinations(range(5),ln): a=sorted(ps[i] for i in idx) ok=len(set(a))==ln if ok: for j in range(1,ln): if a[j]!=sum((a[j-1],1)): ok=False if ok: left=a[0]-1 right=sum((a[-1],1)) if not any(p==left for p in ps): if not any(p==right for p in ps): total=sum((total,ln)) return total def profile2(H): cnt=[0]*13 for k in range(1,14): ps=(*H,k) d=csums(ps) cs=[d.get(m,0) for m in ORDER] best=max(cs) idx=cs.index(best) cnt[idx]=sum((cnt[idx],1)) return tuple(cnt) def scores2(H,m): out=[] for k in range(1,14): ps=(*H,k) d=csums(ps) sc=sum((2*d.get(m,0),seq2(ps),(k in H)*2)) out.append(sc) return out def better(p,q): for i in range(13): if p[i]>q[i]: return True if p[i]rbest: rbest=r rt=[H] elif r==rbest: rt.append(H) print('altmaxrange',rbest) print('altrangecount',len(rt)) print('altrangetied',rt) cur=rt for level in range(1,14): withl=[H for H in cur if level in H] if len(withl)==1: cur=withl print('altliteralselected',level) break print('altliteralfinal',cur) cur2=rt for level in range(1,14): withl=[H for H in cur2 if level in H] if len(withl)>0: cur2=withl print('altlexmaxfinal',cur2) for H in cur: report(H) for H in cur2: if H not in cur: report(H) main()