%Reversible nearest neighbor 2 color generator
addedzeros=0;
[arowlength,acollength]=size(a);
if arowlength==2; a=cat(1,(zeros(1,columns)),a); addedzeros=1; end;
b=a(end,:,end);
for point = 1:columns;
if 1<point & point<columns;
pointleft=(point-1);
pointright=(point+1);
elseif point==1;
pointleft=columns;
pointright=(point+1);
elseif point==columns;
pointleft=(point-1);
pointright=1;
end;
ruleplacenumber=(a(end,pointleft,end)*2^(2)) + (a(end,point,end)*2^(1)) + (a(end,pointright,end)*2^(0))+1;
ruleplacenumber=(8+1)-ruleplacenumber; %reverses order
%zero on prevoius line equals normal, one on previous line equals reverse
if a(end-2,point,end)==0;
b(end,point)=rulenumberbinary(ruleplacenumber);
else;
b(end,point)=all(rulenumberbinary(ruleplacenumber))==0;
end;
end;
a(end,:,end)=b;
[arowlength,acollength]=size(a);
if addedzeros==1; a=a(2:end,:); addedzeros=0; end;