Automa cellulare 1D in p5.js

    let celle = [];  // stati correnti delle celle

function setup() {
    createCanvas(670, 320);
    // INIZIALIZZAZIONE STATO CELLULE
    for (let i = 0; i < width; i++) {
        celle[i] = random() < 0.1 ? 1 : 0; 
    }
}

function draw() {
    // DISEGNO CELLULE
    let riga = frameCount % height;
    for (let i = 0; i < celle.length; i++) {
        if (celle[i] === 1) {
            set(i, riga, 0);
        } else {
            set(i, riga, 255);
        }
    }
    updatePixels(); 
    // AGGIORNAMENTO STATO CELLULE
    let nuoveCelle = [];
    for (let i = 0; i < celle.length; i++) {
        let cc = celle[i]; 
        let isx = (i > 0) ? i-1 : celle.length-1;
        let sx = celle[isx]; 
        let idx = (i < celle.length-1) ? i+1 : 0;
        let dx = celle[idx]; 
    
        if (sx == 1 && cc == 1 && dx == 1) nuoveCelle[i] = 0;
        if (sx == 1 && cc == 1 && dx == 0) nuoveCelle[i] = 1;
        if (sx == 1 && cc == 0 && dx == 1) nuoveCelle[i] = 1;
        if (sx == 1 && cc == 0 && dx == 0) nuoveCelle[i] = 0;
        if (sx == 0 && cc == 1 && dx == 1) nuoveCelle[i] = 1;
        if (sx == 0 && cc == 1 && dx == 0) nuoveCelle[i] = 0;
        if (sx == 0 && cc == 0 && dx == 1) nuoveCelle[i] = 1;
        if (sx == 0 && cc == 0 && dx == 0) nuoveCelle[i] = 0;
    }
    celle = nuoveCelle;
}
  

  

Imposta lo stato della cellula con il 10% di probabilità (0.1) che sia “viva” (1).


  

Calcola un valore che passi continuamente da 0 a (quasi) height.


  

Aggiorna il canvas con i pixel impostati dalle istruzioni set(x,y,colore).


  

Ottieni l’indice della cella a sinistra o dell’ultima, se si sta analizzando la prima cella.


  

Ottieni l’indice della cella a destra o della prima, se si sta analizzando l’ultima cella.

Quella usata è la regola 106 (01101010) ma si può modificare intervenendo sugli if finali, liberamente o facendo riferimento alle altre regole: