Disproof of (2,1)c/2 in alternating isotropic rules:
First of all, if we break the pattern into orthogonal rows (sorry) perpendicular to the "long" axis, or the one that aligns with the (2,0)c/2 part of the (2,1)c/2 motion, we see that the front row cannot be affected by the rows behind it, making it an alternating 1D cellular automaton. B0 doesn't affect anything, since we can negate the transitions of the B0 rule, and then invert the non-B0 rule. Now, if there was a (2,1)c/2 in an alternating rule, there would be a c/2 spaceship in an alternating 1D symmetric cellular automaton. Run this code, which looks for a frontend and a backend, where the first and last 5 cells are preserved after 2 generations, and notice that it doesn't find anything. Therefore, there cannot be a (2,1)c/2 in an isotropic alternating rule.
Code: Select all
var evolve=function(x,trans){
var y=[];
for(var i=1;i<x.length-1;i++){
var j=i-1;
var one=x[i+1];
var two=x[i];
var four=x[i-1];
var pos=one+2*two+4*four;
y[j]=trans[pos];
}
return y;
};
var check1=function(x,ytrans,ztrans){
var y=[0,1,ytrans[0],ytrans[1],1,ytrans[2],ytrans[1],ytrans[3]];
var z=[0,0,ztrans[0],ztrans[1],0,ztrans[2],ztrans[1],ztrans[3]];
var ypat=evolve(x,y);
var zpat=evolve(ypat,z);
return zpat;
}
var pat2bin=function(pat){
var bin=0;
for(var i=0;i<pat.length;i++){
bin*=2;
bin+=pat[i];
}
while(bin%2===0&&bin>0){
bin/=2;
}
return bin;
};
//console.log(pat2bin([0,1,0]));
var bin2pat=function(bin){
var pat=[];
while(bin>0){
pat=[bin%2].concat(pat);
bin-=bin%2;
bin/=2;
}
return pat;
};
//console.log(bin2pat(11));
var check=function(pat){
for(var i=0;i<16;i++){
for(var j=0;j<8;j++){
var y=bin2pat(i);
var z=bin2pat(j);
while(y.length<4){
y.push(0);
}
while(z.length<3){
z.push(0);
}
z=[z[0],1-z[0],z[1],z[2]];
var pat0=pat2bin(pat);
//console.log(check1(pat,y,z));
var p1=check1(pat,y,z);
p1=[0,0].concat(p1);
for(var k=0;k<2;k++){
p1.push(0);
}
var pat1=pat2bin(p1);
var five0=[];
var five1=[];
for(var k=4;k<9;k++){
five0.push(pat[k]);
five1.push(p1[k+1]);
}
for(var k=13;k<18;k++){
five0.push(pat[k]);
five1.push(p1[k+1]);
}
//var f0=pat2bin(five0);
//var f1=pat2bin(five1);
//console.log(j);
if(JSON.stringify(five0)===JSON.stringify(five1)){
console.log(pat);
//console.log(p1);
console.log(y);
console.log(z);
}
}
}
}
//console.log(check1([0,0,0,0,1,1,0,1,0,0,0,0],[1,0,1,0],[1,0,1,0]));
//console.log("Test");
var i=1;
while(i<4096){
var pat=bin2pat(i);
while(pat.length<12){
pat=[0].concat(pat);
}
pat=[1].concat(pat);
pat.push(1);
pat=[0,0,0,0].concat(pat);
for(var j=0;j<4;j++){
pat.push(0);
}
check(pat);
if(i%1024===1){
console.log(i);
}
i+=1;
}
//0 1 A B C D E
//1 F G H I J
//1 A B C D
//0 1 A B C D E F G
//1 H I J K L M N
//0 0 1 A B C D
// 4 9 13 18
//0 0 0 0 1 A B C D E F G H I J K L 1 0 0 0 0
//0 0 0 1 a b c d e f g h i j k l m n 1 0 0 0
//0 0 0 0 0 1 A B C D o p q r s J K L 1 0 0 0
Edit: There's a bug in that code, but this one should work:
Code: Select all
var evolve=function(x,trans){
var y=[];
for(var i=1;i<x.length-1;i++){
var j=i-1;
var one=x[i+1];
var two=x[i];
var four=x[i-1];
var pos=one+2*two+4*four;
y[j]=trans[pos];
}
return y;
};
var check1=function(x,ytrans,ztrans){
var y=[0,1,ytrans[0],ytrans[1],1,ytrans[2],ytrans[1],ytrans[3]];
var z=[0,0,ztrans[0],ztrans[1],0,ztrans[2],ztrans[1],ztrans[3]];
var ypat=evolve(x,y);
var zpat=evolve(ypat,z);
return zpat;
}
var pat2bin=function(pat){
var bin=0;
for(var i=0;i<pat.length;i++){
bin*=2;
bin+=pat[i];
}
while(bin%2===0&&bin>0){
bin/=2;
}
return bin;
};
//console.log(pat2bin([0,1,0]));
var bin2pat=function(bin){
var pat=[];
while(bin>0){
pat=[bin%2].concat(pat);
bin-=bin%2;
bin/=2;
}
return pat;
};
//console.log(bin2pat(11));
var check=function(pat){
for(var i=0;i<16;i++){
for(var j=0;j<8;j++){
var y=bin2pat(i);
var z=bin2pat(j);
while(y.length<4){
y=[0].concat(y);
}
while(z.length<3){
z=[0].concat(z);
}
z=[z[0],1-z[0],z[1],z[2]];
var pat0=pat2bin(pat);
//console.log(check1(pat,y,z));
var p1=check1(pat,y,z);
p1=[0,0].concat(p1);
for(var k=0;k<2;k++){
p1.push(0);
}
var pat1=pat2bin(p1);
var five0=[];
var five1=[];
for(var k=4;k<9;k++){
five0.push(pat[k]);
five1.push(p1[k+1]);
}
for(var k=13;k<18;k++){
five0.push(pat[k]);
five1.push(p1[k+1]);
}
//var f0=pat2bin(five0);
//var f1=pat2bin(five1);
//console.log(j);
if(JSON.stringify(five0)===JSON.stringify(five1)&&p1[3]+p1[4]===0){
console.log(pat);
//console.log(p1);
console.log(y);
console.log(z);
}
}
}
}
//console.log(check1([0,0,0,0,1,1,0,1,0,0,0,0],[1,0,1,0],[1,0,1,0]));
//console.log("Test");
var i=1;
while(i<4096){
var pat=bin2pat(i);
while(pat.length<12){
pat=[0].concat(pat);
}
pat=[1].concat(pat);
pat.push(1);
pat=[0,0,0,0].concat(pat);
for(var j=0;j<4;j++){
pat.push(0);
}
check(pat);
if(i%1024===1){
console.log(i);
}
i+=1;
}
//0 1 A B C D E
//1 F G H I J
//1 A B C D
//0 1 A B C D E F G
//1 H I J K L M N
//0 0 1 A B C D
// 4 9 13 18
//0 0 0 0 1 A B C D E F G H I J K L 1 0 0 0 0
//0 0 0 1 a b c d e f g h i j k l m n 1 0 0 0
//0 0 0 0 0 1 A B C D o p q r s J K L 1 0 0 0