Я изо всех сил пытался начать работу над этим заданием для университета по клеточному автомату. Предпосылка достаточно проста, учитывая массив в форме ниже, где 1 представляют черные квадраты (или живые клетки) и 0 белые квадраты (или мертвые клетки).
world1 = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0]
[0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0]
[0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0]
[0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0]
[0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0]
[0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0]
[0 0 1 0 0 0 0 1 0 1 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
На каждом шаге во времени («галочка») ") следующие переходы происходят во всех ячейках одновременно:
Умирает любая живая клетка с менее чем двумя живыми соседями, как если бы она была вызвана недостаточным населением.
Любая живая клетка с двумя или тремя живыми соседями живет до следующего поколения.
Умирает любая живая клетка с более чем тремя живыми соседями, как если бы она была перенаселена.
Любая мертвая клетка с ровно тремя живыми соседями становится живой, как будто по репродукции. Здесь соседи ссылаются на 8 квадратов, окружающих каждый элемент
Теперь, будучи студентом-физиком, я вижу, что математика довольно проста, но я действительно понятия не имею, как структурировать код и сделать так, чтобы его можно было превратить в анимация позже. Я также вижу, что должны быть некоторые исключения для элементов на краю. Беллоу - моя попытка ... она работает, но ничего не возвращает. Я уверен, что вы можете сказать, что я довольно новичок в программировании!
import numpy as np
world1 = np.loadtxt('data/Pulsar.txt',dtype=np.int8) #loading data
def tick(world):
north = world[i,i-1] #defining neighboughs as se, ne , n etc ..
south = world[i,i+1]
west = world[i+1,i]
east = world[i-1,i]
se = world[i+1,i+1]
sw = world[i+1,i-1]
ne = world[i-1,i+1]
nw = world[i-1,i-1]
neibours = (north, south, west, east, se, sw, ne, nw) #list of neighbough values
np.where(world.all==0 and sum(neibours)==3, 1, world ) #replacing elements in array
np.where(world.all==1 and sum(neibours)<=2, 0, world )
np.where(world.all==1 and sum(neibours)==2 or 3, 1, world )
np.where(world.all==1 and sum(neibours)>=4, 0, world )
print(tick(world1))