Skip to content

Instantly share code, notes, and snippets.

@jl2
Created October 1, 2011 00:11
Show Gist options
  • Save jl2/1255396 to your computer and use it in GitHub Desktop.
Save jl2/1255396 to your computer and use it in GitHub Desktop.
function randInt(minv, maxv) {
var rv = minv + Math.floor(Math.random()*(maxv-minv));
return rv;
}
function initialize(width, height, prob) {
var life = new Array(height);
for (var i = 0; i<height; ++i) {
life[i] = new Array(width);
for (var j=0; j<width; ++j) {
life[i][j] = false;
}
}
var numFilled = (width*height*prob);
for (var i=0;i<numFilled; ++i) {
var ri = randInt(0, height);
var rj = randInt(0, width);
life[ri][rj] = true;
}
return life;
}
function countNeighbors(i,j,arr) {
var h = arr.length;
var w = arr[0].length;
var num = 0;
var up = i-1>0 ? i-1 : h-1;
var down = i+1 <h-1 ? i+1 : 0;
var left = j-1>0 ? j-1 : w-1;
var right = j+1 < w-1 ? j+1 : 0;
num += arr[up][j];
num += arr[down][j];
num += arr[i][left];
num += arr[i][right];
num += arr[up][left];
num += arr[up][right];
num += arr[down][left];
num += arr[down][right];
return num;
}
function evolve(arr) {
var h = arr.length;
var w = arr[0].length;
var rval = new Array(h);
for (var i=0;i<h;++i) {
rval[i] = new Array(w);
}
for (var i=0; i<h; ++i) {
for (var j=0; j<w; ++j) {
var num = countNeighbors(i,j,arr);
if (arr[i][j]) {
if ((num < 2) || (num > 3)) {
rval[i][j] = false;
} else {
rval[i][j] = true;
}
} else {
if (num == 3) {
rval[i][j] = true;
} else {
rval[i][j] = false;
}
}
}
}
return rval;
}
function show(iter, arr) {
var h = arr.length;
var w = arr[0].length;
for (var i=0;i<h; ++i) {
for (var j=0;j<w; ++j) {
if (arr[i][j]) {
// new solidblock(new point(i,j,2*iter), new point(i+1,j+1,2*iter+1));
new solidblock(new point(i,j,iter), new point(i+1,j+1,iter+1));
}
}
}
}
function game_of_life(width, height, iterations) {
var life_board = initialize(width, height, 0.42);
for (var iter = 0; iter<iterations; ++iter) {
show(iter, life_board);
life_board = evolve(life_board);
}
}
game_of_life(10,10,20);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment