Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>Evolution</title>
    <style>
    table {
        border-collapse: collapse;
        margin: auto;
    }
    th,
    td {
        border: 1px solid black;
        vertical-align: middle;
    }
    td {
        width: 20px;
        height: 20px;
        font-size: .85em;
        text-align: center;
    }
    .alive {
        background-color: #475892;
    }
    </style>
</head>
<body onload="init();">
    <table>
        <tbody id="game-grid">
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
            <tr>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
                <td onclick="setAlive(this)"></td>
            </tr>
        </tbody>
    </table>
    <button onclick="blinkersCrawlers()">Blinkers and Crawlers</button>
    <button onclick="evolve()">Evolve</button>
    <button onclick="evolveAuto()">Evolve(Auto)</button>
    <button onclick="apocalypse()">Apocalypse</button>
</body>
</html>
 
var model = new Array(20);
function init() {
  setupModel();
  paintGrid();
}
function setupModel() {
  for (var i = 0; i < model.length; i++) {
    model[i] = new Array(20);
    for (var j = 0; j < model[i].length; j++) {
      model[i][j] = false;
    }
  }
}
function paintGrid() {
  var rows = document.querySelectorAll('#game-grid td');
  for (var i = 0; i < model.length; i++) {
    for (var j = 0; j < model[i].length; j++) {
      var temp = rows[(20 * i) + j];
      temp.setAttribute('data-row', '' + i);
      temp.setAttribute('data-col', '' + j);
      if (model[i][j] === true && temp.className !== 'alive') {
        temp.classList.toggle('alive');
      }
      if (temp.className === 'alive' && model[i][j] === false) {
        temp.classList.toggle('alive');
      }
    }
  }
}
function setAlive(el) {
  var row = el.getAttribute('data-row');
  var col = el.getAttribute('data-col');
  if (model[row][col] === false) {
    model[row][col] = true;
  } else {
    model[row][col] = false;
  }
  
  el.classList.toggle('alive');
}
function shouldBeAlive(row, col) {
  var neighbors_alive = 0;
  if (row > 0) {
    neighbors_alive += model[row - 1][col];
  }
  if (row < model.length - 1) {
    neighbors_alive += model[row + 1][col];
  }
  if (col > 0) {
    neighbors_alive += model[row][col - 1];
  }
  if (col < model[row].length - 1) {
    neighbors_alive += model[row][col + 1];
  }
  
  if (model[row][col] === true) {
    if (neighbors_alive < 2 || neighbors_alive > 3) {
      return false;
    }
    return true;
  }
  else {
    if (neighbors_alive === 2) {
      return true;
    }
    return false;
  }
}
function evolve() {
  for (var i = 0; i < model.length; i++) {
    for (var j = 0; j < model[i].length; j++) {
      model[i][j] = shouldBeAlive(i, j);
    }
  }
  paintGrid();
}
function evolveAuto() {
  for (var i = 0; i < model.length; i++) {
    for (var j = 0; j < model[i].length; j++) {
      model[i][j] = shouldBeAlive(i, j);
    }
  }
  setTimeOut(evolveAuto, 5000);
  paintGrid();
}
function apocalypse() {
  location.reload();
}
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers