Note
Go to the end to download the full example code or to run this example in your browser via JupyterLite.
Animated: Conway’s Game of Life and the Gosper glider gun#
Conway’s rules are local and tiny: a dead cell with exactly three live neighbors is born, a live cell with two or three survives. Yet in 1970 Bill Gosper found a finite pattern that grows forever: a “gun” that fires a new glider every 30 generations. Each glider is five cells that rebuild themselves one cell further along the diagonal every four generations. The live-cell count in the title rises by five per period.
import matplotlib.pyplot as plt
import numpy as np
from mathematicskit.fractals_chaos import GameOfLife
from mathematicskit.fractals_chaos.visualizers import animate_life
# In Jupyter or JupyterLite, show animations as an HTML/JavaScript player
# (no ffmpeg needed).
plt.rcParams["animation.html"] = "jshtml"
# Gosper's glider gun, as (row, column) offsets.
GUN = [
(5, 1), (5, 2), (6, 1), (6, 2),
(5, 11), (6, 11), (7, 11), (4, 12), (8, 12), (3, 13), (9, 13), (3, 14), (9, 14), (6, 15), (4, 16), (8, 16), (5, 17), (6, 17), (7, 17), (6, 18),
(3, 21), (4, 21), (5, 21), (3, 22), (4, 22), (5, 22), (2, 23), (6, 23), (1, 25), (2, 25), (6, 25), (7, 25),
(3, 35), (4, 35), (3, 36), (4, 36),
] # fmt: skip
grid = np.zeros((40, 60), dtype=np.int64)
for row, col in GUN:
grid[row, col] = 1
history = GameOfLife(grid).run(120)
print("live cells every 30 generations:", history.sum(axis=(1, 2))[::30])
live cells every 30 generations: [36 41 46 51 56]
The gun at work#
anim = animate_life(history)
anim
plt.show()
Total running time of the script: (0 minutes 3.958 seconds)