Skip to content

Instantly share code, notes, and snippets.

@VictorTaelin
Created January 25, 2017 15:12
Show Gist options
  • Save VictorTaelin/3ae75e17ecb4400472e0878194694ddf to your computer and use it in GitHub Desktop.
Save VictorTaelin/3ae75e17ecb4400472e0878194694ddf to your computer and use it in GitHub Desktop.
{"r":16801,"rule":[1,2,0,1,0,0,2,1,2],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":11871,"rule":[0,0,2,1,2,0,1,2,1],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":14881,"rule":[1,1,0,2,0,1,2,0,2],"len":63768}
{"r":8703,"rule":[0,0,1,1,2,2,2,0,1],"len":63768}
{"r":5231,"rule":[2,0,2,1,1,0,1,2,0],"len":63768}
{"r":14881,"rule":[1,1,0,2,0,1,2,0,2],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":5231,"rule":[2,0,2,1,1,0,1,2,0],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":2063,"rule":[2,0,1,1,1,2,2,0,0],"len":63768}
{"r":16801,"rule":[1,2,0,1,0,0,2,1,2],"len":63768}
{"r":11871,"rule":[0,0,2,1,2,0,1,2,1],"len":63768}
{"r":8703,"rule":[0,0,1,1,2,2,2,0,1],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":14881,"rule":[1,1,0,2,0,1,2,0,2],"len":63768}
{"r":4763,"rule":[2,0,1,2,1,1,0,2,0],"len":63768}
{"r":16801,"rule":[1,2,0,1,0,0,2,1,2],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":5435,"rule":[2,2,0,0,1,1,1,2,0],"len":63768}
{"r":14881,"rule":[1,1,0,2,0,1,2,0,2],"len":63768}
{"r":16801,"rule":[1,2,0,1,0,0,2,1,2],"len":63768}
{"r":4763,"rule":[2,0,1,2,1,1,0,2,0],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":5435,"rule":[2,2,0,0,1,1,1,2,0],"len":63768}
{"r":11871,"rule":[0,0,2,1,2,0,1,2,1],"len":63768}
{"r":2063,"rule":[2,0,1,1,1,2,2,0,0],"len":63768}
{"r":14881,"rule":[1,1,0,2,0,1,2,0,2],"len":63768}
{"r":8703,"rule":[0,0,1,1,2,2,2,0,1],"len":63768}
{"r":5231,"rule":[2,0,2,1,1,0,1,2,0],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":16801,"rule":[1,2,0,1,0,0,2,1,2],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":16801,"rule":[1,2,0,1,0,0,2,1,2],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":5435,"rule":[2,2,0,0,1,1,1,2,0],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":14881,"rule":[1,1,0,2,0,1,2,0,2],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":4763,"rule":[2,0,1,2,1,1,0,2,0],"len":63768}
{"r":8703,"rule":[0,0,1,1,2,2,2,0,1],"len":63768}
{"r":11871,"rule":[0,0,2,1,2,0,1,2,1],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":5435,"rule":[2,2,0,0,1,1,1,2,0],"len":63768}
{"r":5231,"rule":[2,0,2,1,1,0,1,2,0],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":4763,"rule":[2,0,1,2,1,1,0,2,0],"len":63768}
{"r":2063,"rule":[2,0,1,1,1,2,2,0,0],"len":63768}
... start with all zeroes, one 1
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":2063,"rule":[2,0,1,1,1,2,2,0,0],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":5231,"rule":[2,0,2,1,1,0,1,2,0],"len":63768}
{"r":10401,"rule":[0,2,0,1,2,0,2,1,1],"len":63768}
{"r":2063,"rule":[2,0,1,1,1,2,2,0,0],"len":63768}
{"r":8481,"rule":[0,1,0,2,2,1,2,0,1],"len":63768}
{"r":5231,"rule":[2,0,2,1,1,0,1,2,0],"len":63768}
{"r":2063,"rule":[2,0,1,1,1,2,2,0,0],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":5231,"rule":[2,0,2,1,1,0,1,2,0],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
{"r":2063,"rule":[2,0,1,1,1,2,2,0,0],"len":63768}
{"r":17803,"rule":[1,0,1,2,0,1,0,2,2],"len":63768}
{"r":5231,"rule":[2,0,2,1,1,0,1,2,0],"len":63768}
{"r":18475,"rule":[1,2,0,0,0,1,1,2,2],"len":63768}
//a -a-> a
//a -b-> a
//b -a-> a
//b -b-> b
function tick(rule, j, arr){
var w = Math.sqrt(rule.length);
for (var i=j, l=arr.length; i<l+j; i+=2){
var x = i%l;
var y = (i+1)%l;
var a = arr[x];
var b = arr[y];
var A = rule[a*w+b];
var B = rule[b*w+a];
//console.log(x,y,a,b,A,B);
arr[x] = B;
arr[y] = A;
};
};
function toBase(base, size, n){
var digits = [];
for (var i=0; i<size; ++i){
digits.push(n%base);
n = Math.floor(n / base);
};
return digits;
};
//for (var r=0; r<16; ++r){
//var rule = toBase(2, 4, r);
//var a = [0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1];
//console.log("RULE "+r+" "+JSON.stringify(rule));
//for (var i=0; i<32; ++i){
//console.log((" "+i).slice(-2)+" "+a.join(""));
//tick(rule, i%2, a);
//};
//console.log((" "+i).slice(-2)+" "+a.join(""));
//};
function str(arr){
var str = "";
var sym = [".","x","o","~"];
for (var i=0, l=arr.length; i<l; ++i)
str += sym[arr[i]];
return str;
};
function pad(len, chr, str){
while (str.length < len)
str = chr+str;
return str;
};
function fhash(arr){
var h = 0, p = Math.pow(2, 50);
for (var i=0, l=arr.length; i<l; ++i)
h = (h * 3 + arr[i]) % p;
return h;
};
function sum(arr){
var s = 0;
for (var i=0, l=arr.length; i<l; ++i)
s += arr[i];
return s;
};
function all(symbols, L, heavy){
var R = Math.pow(symbols, Math.pow(symbols, 2));
var A = [];
for (var i=0; i<L; ++i)
A.push(Math.floor(Math.random()*symbols));
//A.push(0);
//A[0] = 1;
var a = A.slice(0);
var results = [];
//for (var r=0; r<R; r+=Math.floor(Math.random()*4000)){
for (var r=0; r<R; ++r){
var log = "";
var visited = {};
var rule = toBase(symbols, Math.pow(symbols, 2), r);
for (var i=0; i<L; ++i)
a[i] = A[i];
//if (heavy && sum(r) !== 24){
//if (heavy && r % 5000 === 0)
//console.log("rule "+r+"/"+R);
//continue;
//};
if (!heavy) log += ("RULE "+r+"/"+R+" "+JSON.stringify(rule)+"\n");
for (var i=0; i<1000000; ++i){
if (!heavy) log += (pad(6," ",String(i))+" "+str(a)+"\n");
tick(rule, i%2, a);
var s = fhash(a);
if (visited[s]) break; else visited[s] = i+1;
};
if (!heavy) log += (pad(6," ",String(i+1))+" "+str(a)+" ("+visited[s]+")\n");
results.push({
log: log,
len: i,
r: r,
rule: rule});
if (heavy && r % 5000 === 0)
console.log("rule "+r+"/"+R);
};
return results;
};
var res = all(3, 10, 0).sort((a,b) => a.len - b.len);
//console.log(res.slice(-16).map(x => x.log).join("\n"));
console.log(res.slice(-256).map(x => JSON.stringify({r:x.r, rule: x.rule, len:x.len})).join("\n"));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment