Skip to content

Instantly share code, notes, and snippets.

@thomasdunn
Last active April 6, 2019 07:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thomasdunn/f7683821f5e5239736370ffe27a16e92 to your computer and use it in GitHub Desktop.
Save thomasdunn/f7683821f5e5239736370ffe27a16e92 to your computer and use it in GitHub Desktop.
Wolfram 1D Automata (buggy but awesome)
var cellSize = 4;
var cellsX = getDrawingWidth() / cellSize;
var cellsY = getDrawingHeight() / cellSize;
var gen = [];
var genNext = [];
var g = 0;
var frames = 100;
function main() {
printLine(cellSize +' '+ cellsX +' '+ cellsY);
setBackgroundColor(white);
for (var i = 0; i < cellsX; i++) {
gen[i] = 0;
}
gen[floor(cellsX / 2)] = 1;
for (var j = 0; j < cellsY * frames; j++) {
drawGen(j % cellsY);
nextGen();
delay(0.001);
}
}
function drawGen(g) {
for (var i = 1; i < cellsX - 1; i++) {
if (gen[i] == 0) {
setColor(white);
}
else {
setColor(black);
}
fillRectangle(i * cellSize, g * cellSize, cellSize, cellSize);
}
}
function nextGen() {
// rule 110 (decimal) = 01101110‬ (binary)
// ‭ 0 1 1 0 1 1 1 0‬
// 111 110 101 100 011 010 001 000
// rule 90 (decimal) = 01011010‬ (binary)
// ‭ 0 1 0 1 1 0 1 0‬
// 111 110 101 100 011 010 001 000
for (var i = 1; i < cellsX - 1; i++) {
var hood = neighborhoodString(i);
if (hood == '111' || hood == '101' ||
hood == '010' || hood == '000') {
genNext[i] = 0;
}
else {
genNext[i] = 1;
}
}
var c = 0;
while (c++ < cellsX) {
gen[c] = genNext[c];
}
}
function neighborhoodString(x) {
/* if (x == 0) {
return gen[cellsX-1] + '' + gen[x] + '' + gen[x+1];
}
else if (x == cellsX - 1) {
return gen[x-1] + '' + gen[x] + '' + gen[0];
}
else {*/
return gen[x-1] + '' + gen[x] + '' + gen[x+1];
//}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment