2019年4月22日月曜日

開発環境

Math Adventures with Python: An Illustrated Guide to Exploring Math with Code (Peter Farrell(著)、No Starch Press)のPART 3(BLAZING YOUR OWN TRAIL)、11(CELLULAR AUTOMATA)、EXERCISE 11-1(MANUALLY GROWING THE CA)の解答を求めてみる。

コード

Python 3

SIZE = 0
GRID_W = 51
GRID_H = 51
cell_list = []
generation = 0


def setup():
    global SIZE, cell_list
    size(600, 600)
    noStroke()
    SIZE = width // GRID_W + 1
    cell_list = create_cell_list()


def draw():
    global generation, cell_list
    for row in cell_list:
        for cell in row:
            cell.display()


def update(cell_list):
    new_list = [[Cell(c, r, cell.check_neighbors(cell_list))
                 for c, cell in enumerate(row)]
                for r, row in enumerate(cell_list)]
    return new_list


def create_cell_list():
    new_list = [[Cell(i, j, 0) for i in range(GRID_W)]
                for j in range(GRID_H)]
    new_list[GRID_H // 2][GRID_W // 2].state = 1
    return new_list


class Cell:
    def __init__(self, c, r, state=0):
        self.c = c
        self.r = r
        self.state = state

    def display(self):
        if self.state == 1:
            fill(0)
        else:
            fill(255)
        rect(SIZE * self.r, SIZE * self.c, SIZE, SIZE)

    def check_neighbors(self, cell_list):
        if self.state == 1:
            return 1
        neighbs = 0
        for dr, dc in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
            try:
                if cell_list[self.r + dr][self.c + dc].state == 1:
                    neighbs += 1
            except IndexError:
                pass
        if neighbs in [1, 4]:
            return 1
        return 0

    def __repr__(self):
        return 'Cell(' + str(self.c) + ',' + str(self.r) + ',' + \
            str(self.state) + ')'


def keyPressed():
    global generation, cell_list
    print(generation)
    if key == CODED:
        cell_list = update(cell_list)
        generation += 1

入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

0 コメント:

コメントを投稿