Pythonで行うことにしたプロジェクトがあります。簡単に言うと、リストのリストがあります。それらのそれぞれにもリストがあり、要素が 1 つだけの場合もあれば、それ以上の場合もあります。次のようになります。
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] をリストの 2 番目と比較します。[x][y] ポイントの値を変更するには、最初の 5 つの比較が真でなければなりません。私はこのようにsthを書きました(メイン関数はSimulateLoopです。simulate2関数は2番目の関数の後に書かれたため、順序が入れ替わっています):
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 配列は World クラスのオブジェクトです。ルールは上記のリストであり、別のプログラム (GPL ライセンス) から取得した関数によって解析されます。
正直なところ、うまく機能しているように見えますが、そうではありません。私は他の可能性を試していましたが、運が悪かったのです。動作しています。インタプリタはエラーを返しませんが、何らかの形で配列の値が間違って変化しています。パーサーを取得したプログラム (GPL ライセンス) によって提供されたので、ルールは適切です。
多分それは役に立つでしょう - それはペリエのループ、修正されたラングトンのループ (人工生命) です。
どんな助けにも非常に感謝します!)