Twitter CA

HTML

A twitter bot that tweets a generation of a CA every hour(?) and each day changes rules. Once all rules have been satisfied it starts again with different seed values.

CSS

html, body {
    margin: 20px;
    font-family: monospace;
    _font-size: 12px;
}

JavaScript

var d = document.createElement( 'div' )
document.body.appendChild(d)

var art = [ '▽', '▲' ];
art = [ '○', '●' ];
art = [ '□', '■' ]
art = [ '◎', '◉' ]
art = [ '◇', '◆' ]
art = [ '◢', '◣' ]
art = [ '◻', '◼' ]
art = [ '▢', '▩' ]
art = [ '░', '▓' ]
art = [ '▁', '▉' ]
art = [ '✳', '✱' ]
art = [ '❑', '❒' ]

var a = []
var h = []
var r = {}
var g = 0

for ( var i = 0; i < 8; i++ ) r[ pad( i.toString(2), 3 ) ] = 0;

function pad( s, i ) {
    while( s.length < i ) s = '0' + s;
    return s;
}

function wrap( n, k ) {
    return n < 0 ? k + n : n % k;
}

function mutate() {
    
    var b = []

    for ( var i = 0, n = a.length; i < n; i++ ) {
        t = a[ wrap( i - 1, n ) ].toString();
        t += a[ i ].toString();
        t += a[ wrap( i + 1, n ) ].toString();
        b[i] = r[t];
    }
    
    a = [].concat(b);
}

function render() {

    for ( var i = 0, n = a.length, s = ''; i < n; i++ )
        s += art[ a[i] ? 1 : 0 ];
    d.innerText += '\n' + s;
}

// run

function init() {
    // initialise values
    a = [];
    while ( a.length < 36 ) a.push( Math.random() < 0.5 ? 0 : 1 )

    // rules
    for ( var k in r ) r[k] = Math.random() < 0.5 ? 0 : 1;
    
    var s = '';
    for ( var k in r ) s += k + ',';
    d.innerText = s;
}

init();

setInterval(function() {
    
    if ( g++ > 20 ) {
        g = 0;
        init();
    }

    render()
    mutate()
    
}, 200)