適当に作ったライフゲーム

わりと良いバランスで、実装の素直さとコードの短さが実現できたので残しておく。
うーん、かつてに比べて高階関数が便利すぎる。

<!DOCTYPE html>
<html lang="ja">
<body>
<pre id="lblDisp"></pre>
<script>
function calcNewCell(cellList, x, y) {
  var count = [[-1,-1], [-1,0], [-1,1], [0,-1], [0,1], [1,-1], [1,0], [1,1]].reduce((a, [dx, dy]) => a + (cellList[x+dx]?.[y+dy] ?? 0), 0);
  return count == 2 ? cellList[x][y] :
         count == 3 ? 1 :
         0;
};
var cellList = [...new Array(100)].map(() => [...new Array(100)].map(() => Math.round(Math.random())));
setInterval(() => {
  cellList = cellList.map((a, x) => a.map((n, y) => calcNewCell(cellList, x, y)));
  lblDisp.innerText = cellList.map(a => a.map(n => n == 1 ? "■" : " ").join("")).join("\n");
}, 100);
</script>
</body>
</html>