In [1]:
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import animation
matplotlib.rcParams['animation.html'] = 'html5'
In [2]:
from functools import reduce
from random import randint
In [3]:
NUM = 64
LEVEL = 8

def randomBoard():
    return [[randint(0, 1) for col in range(NUM)] for row in range(NUM)]

def nextBoard(board):
    torus = lambda i: NUM - 1 if i == -1 else 0 if i == NUM else i
    count = lambda i, j: len([(k, l) for k in [i - 1, i, i + 1] for l in [j - 1, j, j + 1] 
                              if not (k == i and l == j) and board[torus(k)][torus(l)] != 0])
    liveOrDead = lambda n: n == 2 or n == 3
    birth = lambda n: n == 3
    cell = lambda c, n: 1 if c == 0 and birth(n) else min(c + 1, LEVEL) if c != 0 and liveOrDead(n) else 0
    return [[cell(board[i][j], count(i, j)) for j in range(NUM)] for i in range(NUM)]
In [4]:
board = randomBoard()
plt.matshow(board, vmin=0, vmax=NUM)
Out[4]:
<matplotlib.image.AxesImage at 0x7fc79f486978>
In [5]:
board = nextBoard(board)
plt.matshow(board, vmin=0, vmax=LEVEL)
Out[5]:
<matplotlib.image.AxesImage at 0x7fc79f3bef60>
In [6]:
FRAMES = 100

boards = [randomBoard()]
for i in range(1, FRAMES):
    boards.append(nextBoard(boards[i-1]))

fig = plt.figure(figsize=(8,8))

def getArtist(board):
    ax = plt.axes(xlim=(0, NUM-1), ylim=(0, NUM-1)) # specify matrix size
    return ax.matshow(board, vmin=0, vmax=LEVEL)

artists = [[getArtist(b)] for b in boards] # [python - Matplotlib Animation - Stack Overflow](http://stackoverflow.com/questions/18019226/matplotlib-animation)
animation.ArtistAnimation(fig, artists, interval=200, repeat=False)
Out[6]: