TI/Skrypty z zajęć/7: Różnice pomiędzy wersjami

Z Brain-wiki
(Utworzono nową stronę "<source lang="python"> </source>")
 
 
Linia 1: Linia 1:
 
<source lang="python">
 
<source lang="python">
 +
# -*- 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)
 +
 +
 +
 
</source>
 
</source>

Aktualna wersja na dzień 13:40, 15 kwi 2020

# -*- 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)