#!/usr/bin/env python3 from functools import lru_cache B={1:{2,5,8,9},2:{5,7,8},4:{1,2,5,7},5:{7,11},6:{1,2,4,5,8},7:{1,6,8},8:{4,5,9},9:{2,4,5,6,7},11:{1,2,4,6,7,8,9}} def w(a,u): return a if a==u else (10 if u==10 else u) if a==10 else (a if u==10 else (a if u in B.get(a,()) else u)) sp={11,1,2,4,5,6,7,8,9} @lru_cache(None) def O(c,l): if not l: return c if c in sp else 10 return w(O(c,l[1:]),O(l[0],l[1:])) S={11:(1,2,3,4,5,6,7,8,9),1:(1,2,3,4,6,7,8,9,5),6:(1,2,3,4,6,7,9,8,5),9:(1,2,3,4,6,8,9,5,7),8:(1,2,3,6,7,8,9,4,5)} for o,p in S.items(): y=O(10,p) z=O(11,p) print(o,y,z,w(y,z),w(O(11,(10,)+p),O(10,(11,)+p)))