In[]:=
CAWithMemory[init_,t_,opts___]:=CellularAutomaton[​​{​​(*Rule30*)​​{_,_,1,1,1,_,_}->0,{_,_,1,1,0,_,_}->0,{_,_,1,0,1,_,_}->0,{_,_,1,0,0,_,_}->1,{_,_,0,1,1,_,_}->1,{_,_,0,1,0,_,_}->1,{_,_,0,0,1,_,_}->1,{_,_,0,0,0,_,_}->0,​​​​(*Wallhit*)​​{_,_,x_,_,2|3,_,_}:>x,​​​​(*Walltoggle*)​​{_,_,0,2,_,_,_}:>2,​​{_,_,1,2,_,_,_}:>3,​​{_,_,0,3,_,_,_}:>3,​​{_,_,1,3,_,_,_}:>2,​​​​(*Membranetoggle*)​​{_,_,4,6,_,_,_}:>6,​​{_,_,4,7,_,_,_}:>7,​​{_,_,5,6|7,_,_,_}:>8,​​{_,_,4,8,_,_,_}:>8,​​{_,_,5,8,_,_,_}:>7,​​​​(*Memorymovement*)​​{_,_,x:4|5,_,_,_,_}:>x,​​​​(*Memorycopy*)​​{_,_,2,_,_,_,_}:>4,​​{_,_,3,_,_,_,_}:>5,​​​​(*Consensuscopy*)​​{_,_,7,_,_,_,_}:>9,​​{_,_,8,_,_,_,_}->10,​​​​(*Consensusmovement*)​​{_,_,9|10,x_,0,_,_}:>x,​​{_,_,x:9|10,11,_,_,_}:>x,​​​​(*Consensuswall*)​​{_,_,_,11,_,_,_}->11,​​{_,_,11,_,0,_,_}->0,​​​​(*Consensus*)​​(*{l3_,_,l1_,c_,r1_,_,r3_}:>If[If[c==0,r1+r3,l1+l3]+c>=2,1,0]*)​​{b1:9|10,b2:9|10,b3:9|10,b4:9|10,b5:9|10,b6:9|10,b7:9|10}:>Replace[({b1,b2,b3,b4,b5,b6,b7}-9),{l3_,_,l1_,c_,r1_,_,r3_}:>If[If[c==0,r1+r3,l1+l3]+c>=2,10,9]​​],​​​​{_,_,x_,9|10,_,_,_}:>x​​​​},​​init,​​t​​]//​​ArrayPlot[#,opts,ColorRules->{​​(*Rule30'gas'*)​​0->White,1->Black,​​(*Wallstates*)​​2->Lighter[Purple],3->Darker[Purple],​​​​(*Memorystates*)​​4->Lighter[Green],5->Darker[Green],​​​​(*Membrane*)​​6->Brown,​​7->Orange,​​8->Magenta,​​​​(*Consensus*)​​9->Yellow,​​10->Red,​​​​(*Eraser*)​​11->Cyan​​}]&
In[]:=
CAWithMemory[{{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,4,4,4,4,4,6,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11},0},200]
Out[]=
In[]:=
CAWithMemory[{{Splice@RandomInteger[{0,1},10],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,4,4,4,4,4,6,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11},0},200]
Out[]=