Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

563571 views
#########################################################
#########################################################
InstallGlobalFunction(HAP_Binlisttoint,
function(binlist)
local n,l;
n:=0;
for l in [1..26] do
	if binlist[l]=1 then
		n:=n+2^(l-1);
	fi;
od;
return n;
end);
#########################################################
#########################################################

HAP_MOVES_DIM_3:=0;

#########################################################
#########################################################
InstallGlobalFunction(HomotopyEquivalentSmallerSubArray3D,
function(AA,SS)
local
        A,S,
        tog,
        col,
        row,
        dep,
        i,j,ii,jj,k,kk,LTP,TP,RTP,LP,P,RP,LBP,BP,RBP,LT,T,
        RT,L,R,LB,B,RB,LTF,TF,RTF,LF,F,RF,LBF,BF,RBF, LST;

if HAP_MOVES_DIM_3=0 then
ReadPackage("HAP","lib/PolyComplexes/hapMovesDim3B.txt");
fi;

LST:=HAP_MOVES_DIM_3;
A:=FrameArray(AA);
S:=FrameArray(SS);
row:=Length(A);
col:=Length(A[1]);
dep:=Length(A[1][1]);
tog:=true;

######################################################
while tog do
tog:=false;

for i in [1..row] do
for j in [1..col] do
for k in [1..dep] do
if A[i][j][k]=1 and S[i][j][k]=0 then

LTP:=A[i-1][j-1][k-1];
TP:=A[i-1][j-1][k];
RTP:=A[i-1][j-1][k+1];
LP:=A[i-1][j][k-1];
P:=A[i-1][j][k];
RP:=A[i-1][j][k+1];
LBP:=A[i-1][j+1][k-1];
BP:=A[i-1][j+1][k];
RBP:=A[i-1][j+1][k+1];

LT:=A[i][j-1][k-1];
T:=A[i][j-1][k];
RT:=A[i][j-1][k+1];
L:=A[i][j][k-1];
R:=A[i][j][k+1];
LB:=A[i][j+1][k-1];
B:=A[i][j+1][k];
RB:=A[i][j+1][k+1];

LTF:=A[i+1][j-1][k-1];
TF:=A[i+1][j-1][k];
RTF:=A[i+1][j-1][k+1];
LF:=A[i+1][j][k-1];
F:=A[i+1][j][k];
RF:=A[i+1][j][k+1];
LBF:=A[i+1][j+1][k-1];
BF:=A[i+1][j+1][k];
RBF:=A[i+1][j+1][k+1];

if  LST[HAP_Binlisttoint([LTP,TP,RTP,LP,P,RP,LBP,BP,RBP,LT,T,
RT,L,R,LB,B,RB,LTF,TF,RTF,LF,F,RF,LBF,BF,RBF])+1]
then A[i][j][k]:=0; tog:=true;
fi;

fi;
od;
od;
od;

if tog then
for ii in [1..row] do
for jj in [1..col] do
for kk in [1..dep] do
i:=row+1-ii;j:=col+1-jj;k:=dep+1-kk;
if A[i][j][k]=1 and S[i][j][k]=0 then

LTP:=A[i-1][j-1][k-1];
TP:=A[i][j-1][k-1];
RTP:=A[i+1][j-1][k-1];
LP:=A[i-1][j][k-1];
P:=A[i][j][k-1];
RP:=A[i+1][j][k-1];
LBP:=A[i-1][j+1][k-1];
BP:=A[i][j+1][k-1];
RBP:=A[i+1][j+1][k-1];

LT:=A[i-1][j-1][k];
T:=A[i][j-1][k];
RT:=A[i+1][j-1][k];
L:=A[i-1][j][k];
R:=A[i+1][j][k];
LB:=A[i-1][j+1][k];
B:=A[i][j+1][k];
RB:=A[i+1][j+1][k];

LTF:=A[i-1][j-1][k+1];
TF:=A[i][j-1][k+1];
RTF:=A[i+1][j-1][k+1];
LF:=A[i-1][j][k+1];
F:=A[i][j][k+1];
RF:=A[i+1][j][k+1];
LBF:=A[i-1][j+1][k+1];
BF:=A[i][j+1][k+1];
RBF:=A[i+1][j+1][k+1];

if  LST[HAP_Binlisttoint([LTP,TP,RTP,LP,P,RP,LBP,BP,RBP,LT,T,RT,L,R,LB,B,
RB,LTF,TF,RTF,LF,F,RF,LBF,BF,RBF])+1]
then A[i][j][k]:=0; tog:=true;
fi;

fi;
od;
od;
od;
fi;

od;
#############################################

return UnframeArray(A);
end);
######################################################################
######################################################################


#####################################################################
#####################################################################
InstallGlobalFunction(HomotopyEquivalentLargerSubArray3D,
function(AA,BB)
local
        A,B,
        tog,
        col,
        row,
        dep,
        start,
        i,j,k,ii,jj,kk,
        LTP,TP,RTP,LP,RP,P,LBP,BP,RBP,T,RT,L,R,
        LB,RB,LTF,TF,RTF,LF,F,RF,LBF,BF,RBF,LT,Bk,
        LST ;

if HAP_MOVES_DIM_3=0 then
ReadPackage("HAP","lib/PolyComplexes/hapMovesDim3B.txt");
fi;
LST:=HAP_MOVES_DIM_3;

A:=FrameArray(AA);
B:=FrameArray(BB);
row:=Length(A);
col:=Length(A[1]);
dep:=Length(A[1][1]);

##If B is empty then###############################
if ArraySum(B)=0 then

start:=0;
############################
for k in [1..dep] do
for j in [1..col] do
for i in [1..row] do
if A[i][j][k]=1 then
start:=[i,j,k]; break; fi;
od;
if IsList(start) then break; fi;
od;
if IsList(start) then break; fi;
od;
############################

#B:=A*0;
B[start[1]][start[2]][start[3]]:=1;

fi;
##B is now probably non-empty######################

tog:=true;
while tog do
tog:=false;

for i in [1..row] do
for j in [1..col] do
for k in [1..dep] do
if A[i][j][k]=1 and B[i][j][k]=0 then

LTP:=B[i-1][j-1][k-1];
TP:=B[i-1][j-1][k];
RTP:=B[i-1][j-1][k+1];
LP:=B[i-1][j][k-1];
P:=B[i-1][j][k];
RP:=B[i-1][j][k+1];
LBP:=B[i-1][j+1][k-1];
BP:=B[i-1][j+1][k];
RBP:=B[i-1][j+1][k+1];

LT:=B[i][j-1][k-1];
T:=B[i][j-1][k];
RT:=B[i][j-1][k+1];
L:=B[i][j][k-1];
R:=B[i][j][k+1];
LB:=B[i][j+1][k-1];
Bk:=B[i][j+1][k];
RB:=B[i][j+1][k+1];

LTF:=B[i+1][j-1][k-1];
TF:=B[i+1][j-1][k];
RTF:=B[i+1][j-1][k+1];
LF:=B[i+1][j][k-1];
F:=B[i+1][j][k];
RF:=B[i+1][j][k+1];
LBF:=B[i+1][j+1][k-1];
BF:=B[i+1][j+1][k];
RBF:=B[i+1][j+1][k+1];

if  LST[HAP_Binlisttoint([LTP,TP,RTP,LP,P,RP,LBP,BP,RBP,LT,T,
RT,L,R,LB,Bk,RB,LTF,TF,RTF,LF,F,RF,LBF,BF,RBF])+1]
then B[i][j][k]:=1; tog:=true;
fi;

fi;
od;
od;
od;

if tog then
for ii in [1..row] do
i:=row-ii+1;

for jj in [1..col] do
j:=col-jj+1;

for kk in [1..dep] do
k:=dep-kk+1;



if A[i][j][k]=1 and B[i][j][k]=0 then

LTP:=B[i-1][j-1][k-1];
TP:=B[i-1][j-1][k];
RTP:=B[i-1][j-1][k+1];
LP:=B[i-1][j][k-1];
P:=B[i-1][j][k];
RP:=B[i-1][j][k+1];
LBP:=B[i-1][j+1][k-1];
BP:=B[i-1][j+1][k];
RBP:=B[i-1][j+1][k+1];

LT:=B[i][j-1][k-1];
T:=B[i][j-1][k];
RT:=B[i][j-1][k+1];
L:=B[i][j][k-1];
R:=B[i][j][k+1];
LB:=B[i][j+1][k-1];
Bk:=B[i][j+1][k];
RB:=B[i][j+1][k+1];

LTF:=B[i+1][j-1][k-1];
TF:=B[i+1][j-1][k];
RTF:=B[i+1][j-1][k+1];
LF:=B[i+1][j][k-1];
F:=B[i+1][j][k];
RF:=B[i+1][j][k+1];
LBF:=B[i+1][j+1][k-1];
BF:=B[i+1][j+1][k];
RBF:=B[i+1][j+1][k+1];

if  LST[HAP_Binlisttoint([LTP,TP,RTP,LP,P,RP,LBP,BP,RBP,LT,T,RT,L,R,LB,Bk,
RB,LTF,TF,RTF,LF,F,RF,LBF,BF,RBF])+1]
then B[i][j][k]:=1; tog:=true;
fi;

fi;
od;
od;
od;
fi;

od;

return UnframeArray(B);
end);
#####################################################################
#####################################################################