(GAP) ChooseList:=function(a, B) local x, p, i; x:=a; p:=1; for i in B do p:=p*Binomial(x, i); x:=x-i; od; return p; end;;
DoylePartitions:=function(n) return Union(List(Partitions(n+8, 8)-1, P->PermutationsList(P))); end;;
DoyleF1:=function(A) return A[1]+A[3]+A[2]+A[4]; end;;
DoyleF2:=function(A) return A[1]+A[2]+A[5]+A[6]; end;;
DoyleF3:=function(A) return A[1]+A[3]+A[5]+A[7]; end;;
DoyleF12:=function(A) return A[1]+A[2]; end;;
DoyleF23:=function(A) return A[1]+A[5]; end;;
DoyleF13:=function(A) return A[1]+A[3]; end;;
DoyleF123:=function(A) return A[1]; end;;
DoyleG:=function(A) return DoyleF1(A)*DoyleF2(A)*DoyleF3(A) -DoyleF12(A)*DoyleF3(A) -DoyleF23(A)*DoyleF1(A) -DoyleF13(A)*DoyleF2(A) +2*DoyleF123(A); end;;
DoyleGProduct:=function(A) local i, p, B; p:=1; for i in [1..8] do B:=List(A, j->j); B[i]:=B[i]-1; B[8]:=B[8]+1; p:=p*DoyleG(B)^A[i]; od; return p; end;;
NrFourLineNormalisedLatinRectanglesDoyle:=function(n) local count, A; count:=0; for A in DoylePartitions(n) do count:=count+(-1)^(A[2]+A[3]+A[5]+2*(A[4]+A[6]+A[7])+3*A[8])*ChooseList(n, A)*DoyleGProduct(A); od; return count; end;; # Douglas Stones (douglas.stones(AT)sci.monash.edu.au), Apr 01 2009, Sep 05 2009
|