Skip to content

Instantly share code, notes, and snippets.

@rifazn
Created January 3, 2021 15:31
Show Gist options
  • Save rifazn/5ad0283bd6d01886349b409059cca285 to your computer and use it in GitHub Desktop.
Save rifazn/5ad0283bd6d01886349b409059cca285 to your computer and use it in GitHub Desktop.
Conway simulation for Simulation & Modeling course.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gen: 1\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 288x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gen: 2\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 288x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gen: 3\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 288x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gen: 4\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 288x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Gen: 5\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 288x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from copy import deepcopy\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
"NUMROWS = NUMCOLS = 5\n",
"\n",
"# game grid, but with a padding of zeroes on either side\n",
"# to make counting neighboring live cells earier\n",
"grid = [[0 for _ in range(NUMCOLS + 2)]] # upper padding\n",
"grid += [[0 for _ in range(NUMCOLS + 2)] for _ in range(NUMROWS)]\n",
"grid += [[0 for _ in range(NUMCOLS + 2)]] # lower padding\n",
"\n",
"future_grid = deepcopy(grid)\n",
"\n",
"def print_grid(do_print=True, do_draw=False):\n",
" if do_print == False and do_draw == False:\n",
" do_print = True\n",
" \n",
" if do_print:\n",
" for i in range(1, NUMROWS + 1):\n",
" print(future_grid[i])\n",
" if do_draw:\n",
" draw_grid(future_grid)\n",
"\n",
"def draw_grid(image_matrix):\n",
" \n",
" nrows = len(image_matrix)\n",
" ncols = len(image_matrix[0])\n",
" row_labels = range(nrows)\n",
" col_labels = range(ncols)\n",
" plt.matshow(image_matrix)\n",
" plt.xticks(range(ncols), col_labels)\n",
" plt.yticks(range(nrows), row_labels)\n",
" plt.show()\n",
"\n",
"def count_live_neighbors(i, j):\n",
" upper_row = i-1\n",
" bottom_row = i+1\n",
" left = j-1\n",
" right = j+1\n",
"\n",
" \"\"\"if upper_row == 0 or bottom_row == NUMROWS + 1 \\\n",
" or left == 0 or right == NUMCOLS + 1:\n",
" print(upper_row, bottom_row, left, right)\n",
" raise Exception('Yo. Out of bounds.')\"\"\"\n",
"\n",
" return sum(\n",
" grid[ upper_row][left : right + 1] +\n",
" [grid[i][left]] + [grid[i][right]] +\n",
" grid[bottom_row][left : right + 1]\n",
" )\n",
"\n",
"def set_live_cells(live_positions: '2d tuple'):\n",
" for [x, y] in live_positions:\n",
" grid[x][y] = 1\n",
"\n",
"def conway_step(i, j):\n",
" live_count = count_live_neighbors(i, j)\n",
"\n",
" if grid[i][j] == 1: # cell is 'live'\n",
" if live_count < 2 or live_count > 3:\n",
" future_grid[i][j] = 0\n",
" else:\n",
" if live_count == 3:\n",
" future_grid[i][j] = 1\n",
"\n",
"def conway(num_generations = 5):\n",
" global grid, future_grid\n",
" for g in range(num_generations):\n",
" future_grid = deepcopy(grid)\n",
" \n",
" print(f'Gen: {g + 1}')\n",
" print_grid(do_draw=True, do_print=False)\n",
" \n",
" for i in range(1, NUMROWS + 1):\n",
" for j in range(1, NUMCOLS+1):\n",
" conway_step(i, j)\n",
" grid = deepcopy(future_grid)\n",
"\n",
"\n",
"if __name__ == \"__main__\":\n",
" live_cells = [\n",
" [2, 3], [2, 4], [2, 5],\n",
" [3, 2], [3, 3], [3, 4]\n",
" ]\n",
" set_live_cells(live_cells)\n",
" conway()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.1"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment