#!/usr/bin/env python3 from fractions import Fraction # 0=1,1=-1,2=i,3=-i,4=j,5=-j,6=k,7=-k # element as (kind,sign); kind 0=scalar,1=i,2=j,3=k tab={} tab[(1,1)]=(0,-1) tab[(2,2)]=(0,-1) tab[(3,3)]=(0,-1) tab[(1,2)]=(3,1) tab[(2,1)]=(3,-1) tab[(2,3)]=(1,1) tab[(3,2)]=(1,-1) tab[(3,1)]=(2,1) tab[(1,3)]=(2,-1) def mul(a,b): if a[0]==0: return (b[0],a[1]*b[1]) if b[0]==0: return (a[0],a[1]*b[1]) k,s=tab[(a[0],b[0])] return (k,a[1]*b[1]*s) letters=[((1,1),2,1),((1,-1),-2,-1),((2,1),-1,2),((2,-1),1,-2)] inv=[1,0,3,2] dp={} for e,(q,a,b) in enumerate(letters): dp[(e,e,q,a,b)]=1 for pos in range(1,12): nd={} for (f,l,q,x,y),c in dp.items(): for g,(qq,aa,bb) in enumerate(letters): if g==inv[l]: continue key=(f,g,mul(q,qq),x+aa,y+bb) nd[key]=nd.get(key,0)+c dp=nd S=0 N=0 for (f,l,q,x,y),c in dp.items(): if l==inv[f]: continue if q!=(kind,sign) where (kind,sign)=(0,-1): pass if q!=(0,-1): continue if (x+2*y)%5: continue e=(abs(2*x-y)+abs(x+2*y)+abs(-3*x-y))//2 S+=e*c N+=c print(S,N,Fraction(S,24))