У меня есть проект, который я решил сделать на Python. Вкратце: у меня есть список списков. У каждого из них также есть списки, иногда одноэлементные, иногда больше. Это выглядит так:
rules=[
[[1],[2],[3,4,5],[4],[5],[7]]
[[1],[8],[3,7,8],[3],[45],[12]]
[[31],[12],[43,24,57],[47],[2],[43]]
]
Смысл в том, чтобы сравнивать значения из массива numpy со значениями из этих правил (элементы таблицы правил). Мы сравниваем некоторую точку [x] [y] с первым элементом (например, 1 в первом элементе), затем, если это правда, значение [x-1] [j] из массива со вторым из списка и так далее. Пять первых сравнений должны быть верными, чтобы изменить значение точки [x] [y]. Я написал что-то вроде этого (основная функция - SimulateLoop, порядок переключен, потому что функция simulate2 была написана после второй):
def simulate2(self, i, j, w, rule):
data = Data(rule)
if w.world[i][j] in data.c:
if w.world[i-1][j] in data.n:
if w.world[i][j+1] in data.e:
if w.world[i+1][j] in data.s:
if w.world[i][j-1] in data.w:
w.world[i][j] = data.cc[0]
else: return
else: return
else: return
else: return
else: return
def SimulateLoop(self,w):
for z in range(w.steps):
for i in range(2,w.x-1):
for j in range(2,w.y-1):
for rule in w.rules:
self.simulate2(i,j,w,rule)
Класс данных:
class Data:
def __init__(self, rule):
self.c = rule[0]
self.n = rule[1]
self.e = rule[2]
self.s = rule[3]
self.w = rule[4]
self.cc = rule[5]
Массив NumPy - это объект из мирового класса. Правила - это список, как описано выше, анализируемый функцией, полученной из другой программы (лицензия GPL).
Если честно, кажется, что он работает нормально, но это не так. Я пытался другие возможности, без удачи. Работает, интерпретатор не возвращает ошибок, но значения в массиве изменяются неправильно. Правила хороши тем, что они были предоставлены программой, из которой я получил парсер (лицензия GPL).
Может быть, это будет полезно - это петля Перье, модифицированная петля Лэнгтона (искусственная жизнь).
Буду очень благодарен за любую помощь!
)