TI/Skrypty z zajęć/7

Z Brain-wiki
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

'''
• Żywa komórka, która ma mniej niż dwóch żywych sąsiadów umiera z „osamotnienia”
• Żywa komórka, która ma dwóch lub trzech żywych sąsiadów pozostaje żywa
• Żywa komórka, która ma więcej niż trzech żywych sąsiadów umiera z „przeludnienia”
• Każda martwa komórka z dokładnie trzema żywymi sąsiadami staje się żywa poprzez „reprodukcję”
'''
R = np.array([[0,0,0,0,0],[0,0,1,1,0],[0,1,1,0,0],[0,0,1,0,0],[0,0,0,0,0]])
#R = np.array([[0,0,0,0,0],[0,0,0,0,0],[0,1,1,1,0],[0,0,0,0,0],[0,0,0,0,0]])


def step_a(a):
    result = np.zeros(a.shape)
    for x in range(a.shape[0]):
        for y in range(a.shape[1]):
            #liczenie sasiadow
            nei = np.sum(a[max(x-1,0):x+2,max(y-1,0):y+2])-a[x,y]
            if nei==3: result[x,y] = 1
            if nei==2: result[x,y] = a[x,y]
    return result

def step_b(a):
    result = np.zeros(a.shape)
    temp = np.zeros((a.shape[0]+2,a.shape[1]+2))
    temp[1:-1,1:-1] = a
    for x in range(a.shape[0]):
        for y in range(a.shape[1]):
            #liczenie sasiadow
            nei = np.sum(temp[x:x+3,y:y+3])-temp[x+1,y+1]
            if nei==3: result[x,y] = 1
            if nei==2: result[x,y] = a[x,y]
    return result

def step_c(a):
    neib = [(-1,-1),(-1,0),(-1,1),(1,-1),(1,0),(1,1),(0,-1),(0,1)]
    temp = np.zeros((a.shape[0]+2,a.shape[1]+2))
    temp[1:-1,1:-1] = a

    result = np.zeros(a.shape)
    for x in range(a.shape[0]):
        for y in range(a.shape[1]):
            #liczenie sasiadow
            nei = np.sum([temp[1+x+xx,1+y+yy] for xx,yy in neib])
            if nei==3: result[x,y] = 1
            if nei==2: result[x,y] = a[x,y]
    return result


for n in  range(15):
    plt.imshow(R, cmap="Greys")
    plt.show()
    R = step_c(R)