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[]=