Skip to content

Instantly share code, notes, and snippets.

@icheishvili
Created March 25, 2012 21:19
Show Gist options
  • Save icheishvili/2199853 to your computer and use it in GitHub Desktop.
Save icheishvili/2199853 to your computer and use it in GitHub Desktop.
Conway's Game of Life
def make_board(width, height):
return [[0 for x in range(width)] for y in range(height)]
def print_board(board):
for row in board:
print ''.join([str(x) for x in row])
def neighbors(board, x, y):
def coords(x, y):
yield x - 1, y - 1
yield x, y - 1
yield x + 1, y -1
yield x - 1, y
yield x + 1, y
yield x - 1, y + 1
yield x, y + 1
yield x + 1, y + 1
for col, row in coords(x, y):
if row >= 0 and row < len(board) and col >= 0 and col < len(board[row]):
yield board[row][col]
def live_neighbors(board, x, y):
return len(list(i for i in neighbors(board, x, y) if i))
board = make_board(25, 25)
board[1][1] = 1
board[1][2] = 1
board[2][1] = 1
board[2][2] = 1
board[3][3] = 1
board[3][4] = 1
board[4][3] = 1
board[4][4] = 1
for i in xrange(10):
print_board(board)
print
new_board = make_board(25, 25)
for row in xrange(len(board)):
for col in xrange(len(board[row])):
ln = live_neighbors(board, row, col)
if board[row][col]:
if ln < 2:
new_board[row][col] = 0
elif ln == 2 or ln == 3:
new_board[row][col] = 1
elif ln > 3:
new_board[row][col] = 0
elif ln == 3:
new_board[row][col] = 1
board = new_board
print_board(board)
print
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment