2

55行14セルのルール110の使い方を考えていました。次に、それをLEDマトリックスディスプレイに表示する必要があります。

とにかく私の質問は、どうすればそのようなオートマトンを実装できますか?

どこから始めればいいのかよくわかりません。誰かがこの問題にどのように取り組むことができるかについて光を当ててください。

私が従わなければならない特定の方法はありますか?

ありがとう

-使用されるプログラムは->C

編集

char array[54][14];
for(v=0;v<55;v++){ 
  for(b=0;b<15;b++){ 
    if(org[v][b-1]==0 && org[v][b]==0 && org[v][b+1] == 0)                                                         
      {
        array[v][b]=0;
      }
      array[v][b]=org[v][b];
 }

}

それは理にかなっていますか ??orgはoriginalの略です

4

1 に答える 1

5

さて、すべてのセルオートマトンは「再発関係」を中心に構築されているため、時間tでの状態は時間t -1での状態に依存します。したがって、すべてのセルオートマトンには基本構造があり、配列など、状態を表すデータ構造があります。したがって、抽象的には、プログラムは次のようになります。

State t
/* initialize t */
while(/* end condition isn't satisfied */){
    t = rule(t);
    /* display state somehow */
}

ここで、rule(t)はその次の状態を計算する関数です。

次のステップは、状態を表すデータ構造を考え出すことです。これは実際には簡単です。基本的な1dセルオートマトンの状態は、1と0のベクトルにすぎません。

したがって、14個の小さな数の配列が必要です。スペースは問題にならないので、intを使用します。

 int t[14] ; /* state vector*/

終了条件は簡単です-55行を実行することになっているので、

 int count = 0;
 while(count++ < 55)

行0〜54、つまり55が得られることに注意してください。Cの適切な基本パターンは、0から開始し、ポストインクリメントし、テストが未満であるということです。おそらく、Cで記述した10個のループのうち9個がそのパターンになります。

最後に、問題はルールをどのように実装するかです。残念ながら、これはCであるため、私の説明のように単純に行うことはできません。ルールは、その場でベクトルを更新する必要があります。それはよく似ているでしょう

void rule(int t[]){
     /* compute the update here */
}

さて、更新を計算する方法を正確に説明するつもりはありません。そうすると、楽しみがまったく得られないからです。しかし、ルール110に関するウィキペディアの記事がおもしろいと思うかもしれません。

それを読むときは、これを熟考してください。この単純なルールは「チューリング完全」です。これは、計算を表現する能力があることを意味します。その単純なルールは、それ自体、理論的な意味での「コンピューター」です。

アップデート

さて、ルールについてもう少し。Wiki記事のルールテーブルをご覧ください。これが示すのは、配列の3つのセルを取得し、3つのセルの中央のセルの次の値を決定することです。

したがって、ルールでは、渡す配列tと、次の瞬間の配列が必要です。これをt1と呼びます。

  void rule(int t[]){ // there's the original
       int t1[14];    // there's the new array
       int ix ;       // an index for the loop that's coming up

配列の各セルを調べたい

       for(ix=0; ix < 14; ix++){

セルと左右のセルを確認します

            if(t[ix-1] == 0 && t[ix] == 0 && t[ix+1] == 0)
               t1[ix] = 0;
            else if(t[ix-1] == 0 && t[ix] == 0 && t[ix+1] == 1)
               t1[ix] = 1;

等々。エッジで何が起こるか、つまり、いつix == 0または。について考える必要がありますix == 13

最後に、にコピーして戻すには別のforループが必要になります。t1t

于 2011-03-04T02:23:06.650 に答える