|
PROG
|
numedge=binomial(2^n, 2); lowercolor=shift(1, numedge-1); uppercolor=bitneg(0, numedge)-shift(1, numedge-6); maximumvalue=shift(31, numedge-5); count=0; offset=(n>2); if(n<=1, 0,
edges=vector(n, b, A=List(); forvec(a=vector(2*0^(b-1)+2, i, [1, 2^if(b-1, b, n)]), listput(A, a), 2); Vec(A));
e=matconcat(vecsort(apply(cvert->vecsort(apply(cedge->for(d=2, n, if(vecsearch(edges[d], cedge), return(vecsearch(edges[d], cedge)-1), vecsearch(edges[d+1], cedge)&&vecsearch(edges[d+1], cedge)<=#edges[d], return(vecsearch(edges[d+1], edges[d][vecsearch(edges[d+1], cedge)])-1))), apply(edge->vecextract(cvert, edge), edges[2]))), select(vertex->(matrank(matrix(n, #vertex-1, q, p, bittest(vertex[p]-1, q-1)-bittest(vertex[#vertex]-1, q-1)))<=2), edges[1])), , 4)~);
edgebits=matrix(6, #e[, 1]-offset, q, p, e[p+offset, q]); coplanar=#edgebits[1, ]; checker=vector(coplanar, i, sum(b=1, 6, shift(1, edgebits[b, i])));
forstep(coloring=uppercolor, lowercolor, -1, for(m=1, coplanar, if(bitand(checker[m], coloring)==checker[m], count=count+shift(2, edgebits[1, m]); coloring=coloring-bitneg(0, edgebits[1, m]); break(), bitand(checker[m], coloring), , count=count+shift(2, edgebits[1, m]); coloring=coloring-bitneg(0, edgebits[1, m]); break()))); maximumvalue-count)}
|