xxxxxxxxxx
53
let cells = [];
let w = 5;
let y = 0;
let left, right, state;
function setup() {
createCanvas(600, 600);
let total = width / w;
// Initialize all cells to state 0 (inactive).
for (let i = 0; i < total; i++) {
cells[i] = 0;
}
cells[floor(total / 2)] = 1;
background(255);
}
function draw() {
for (let i = 0; i < cells.length; i++) {
let x = i * w;
noStroke();
fill(cells[i]);
square(x, y, w);
}
y += w;
let nextCells = [];
let len = cells.length;
for (let i = 0; i < len; i++) {
left = cells[(i - 1 + len) % len];
right = cells[(i + 1) % len];
state = cells[i];
let newState = calculateState(left, state, right);
nextCells[i] = newState;
}
cells = nextCells;
}
function calculateState(a, b, c) {
if (a > 0.5 && b < 0.5 && c < 0.5) return a;
if (a > 0.5 && b > 0.5 && c < 0.5) return a + b;
if (a > 0.5 && b > 0.5 && c > 0.5) return 0;
if (a > 0.5 && b < 0.5 && c > 0.5) return a + c;
if (a < 0.5 && b > 0.5 && c > 0.5) return b + c;
if (a < 0.5 && b > 0.5 && c < 0.5) return b;
if (a < 0.5 && b < 0.5 && c > 0.5) return c;
if (a < 0.5 && b < 0.5 && c < 0.5) return 0;
}