In[]:=
Clear[RandomReversibleBCARule,SymmetricReversibleRule,blocks]
In[]:=
RandomReversibleBCARule[]:=MapThread[Rule,{Tuples[{0,1,2},2],RandomSample[Tuples[{0,1,2},2]]}]
In[]:=
blocks=GatherBy[GatherBy[RandomSample[Tuples[{0,1,2},2]],Union@{#,Reverse[#]}&],Length];
In[]:=
SymmetricReversibleRule[code_,perm1_,perm2_]:=Join[MapThread[Rule,{Catenate[First[blocks]],Catenate[MapThread[Part[#1,#2]&,{First[blocks],RotateRight[{1,2},#]&/@code}][[perm1]]]}],MapThread[Rule,{Catenate[Last[blocks]],Catenate[Last[blocks]][[perm2]]}]]
In[]:=
ruleSet=Flatten[Outer[SymmetricReversibleRule[#1,#2,#3]&,Tuples[{1,0},3],Permutations[Range[3]],Permutations[Range[3]],1],2];
In[]:=
Length[ruleSet]
Out[]=
288
In[]:=
Take[ruleSet,3]
Out[]=
{{{1,0}{0,1},{0,1}{1,0},{1,2}{2,1},{2,1}{1,2},{2,0}{0,2},{0,2}{2,0},{1,1}{1,1},{0,0}{0,0},{2,2}{2,2}},{{1,0}{0,1},{0,1}{1,0},{1,2}{2,1},{2,1}{1,2},{2,0}{0,2},{0,2}{2,0},{1,1}{1,1},{0,0}{2,2},{2,2}{0,0}},{{1,0}{0,1},{0,1}{1,0},{1,2}{2,1},{2,1}{1,2},{2,0}{0,2},{0,2}{2,0},{1,1}{0,0},{0,0}{1,1},{2,2}{2,2}}}
In[]:=
Cases[ruleSet,{___,{0,0}->{0,0},___}]//Length
Out[]=
96
In[]:=
ResourceFunction["InteractiveListSelector"][ArrayPlot[ResourceFunction["BlockCellularAutomaton"][#,RandomInteger[2,100],100],ColorRules->{0->White,1->Lighter[Orange],2->Darker[Orange]}]&,ruleSet]
In[]:=
ResourceFunction["InteractiveListSelector"][ArrayPlot[ResourceFunction["BlockCellularAutomaton"][#,CenterArray[{2,1,2},100],100],ColorRules->{0->White,1->Lighter[Orange],2->Darker[Orange]}]&,ruleSet]
Out[]=
k=2 case
k=2 case
Class search
Class search
Class 4 reversible
Class 4 reversible