タグ付けされた質問 「cellular-automata」

ConwayのLife of Gameなどのセルラーオートマトンに関連するパズル。

5
1Dセルラーオートマトンのシミュレーション
チャレンジ STDINから7つの数字を取得し、セルオートマトン(CA)の2次元の履歴をSTDOUTに出力する完全なプログラムを作成します。これはコードゴルフです。 入力フォーマット 入力は、コンマで区切られた7つの整数/文字列です。最初の数字は、Wolframコード(各ルールの標準名)に従ったルールの番号です。2番目は、最初の初期構成です。3番目と4番目は、開始パターンの左側に追加するパターンとその回数を示しています。パディングとして。5番目と6番目は右側についても同じことを行います。最後の数字は、シミュレーションを実行する世代の数です。 したがって、入力の例はです90,11,0,4,0,4,5。これにより、プログラムにルール90を実行していることがわかります。また、プログラムに、両端に11文字列を04回追加した初期構成にすることを伝える必要があるため、実際の開始パターンは0000110000です。また、このシミュレーションを5世代実行するようプログラムに指示します。 出力プログラムは、出力がCAの時空間図になるように、各世代のセルの配列全体(改行で区切られている)を印刷する必要があります。世代ごとに、各セルの状態は、その状態と、入力として提供されたルールに従って、すぐ左と右のセルの状態によって決定されます。シミュレーションはエッジの周りをラップする必要があります。最初に印刷されるのは、genとしての開始配列です。0。 入力90,11,0,4,0,4,5により、次の出力が可能な限り正確になります。 0000110000 0001111000 0011001100 0111111110 1100000011 0110000110 開始状態は5つの世代に含まれていないことに注意してください。また、シミュレーションがエッジの周りをラップしていることに注意してください。 その他の例 入力: 184,1100,01,2,01,1,4 出力: 0101110001 1011101000 0111010100 0110101010 0101010101 入力: 0,1011,1,0,0,1,2 出力: 10110 00000 00000 1D CAの仕組みと番号付け方法の詳細

6
バイナリ自己回転
バイナリ3D配列が与えられた場合、各レイヤーについて、その上のレイヤーの列のバイナリエンコーディングで示されるステップ数だけ各列を循環的に上に回転させ、その後、その下のレイヤーの行のバイナリエンコーディング。 常に少なくとも3つのレイヤーがあります。最上層の列と最下層の行は回転させないでください。 ウォークスルー 小さな4層、2行、3列の配列から始めましょう。 [[[1,0,1], [1,0,0]], [[1,0,1], [0,1,1]], [[0,1,1], [1,1,1]], [[1,1,0], [1,1,1]]] 最初のステップは、各レイヤーの列と行によってバイナリでエンコードされた数値を評価することです。 3 0 2 5 [[[1,0,1], 4 [1,0,0]], 2 1 3 5 [[1,0,1], 3 [0,1,1]], 1 3 3 3 [[0,1,1], 7 [1,1,1]], 3 3 1 6 [[1,1,0], 7 [1,1,1]]] 最初のレイヤーの[[1,0,1],[1,0,0]]列は回転しませんが、行はそれぞれ左に5ステップと3ステップ左に循環的に回転するため、になり[[1,1,0],[1,0,0]]ます。 2番目のレイヤーの列は、[[1,0,1],[0,1,1]]それぞれ3、0、および2ステップ上で[[0,0,1],[1,1,1]]周期的に回転します。次に、行は、目に見える変化なしに、それぞれ、3および7ステップ左に周期的に回転します。2、1、および3ステップ 上に[[0,1,1],[1,1,1]]回転した3番目のレイヤーは同じままで、左および6ステップを回転しても何も実行されません。 最後に[[1,1,0],[1,1,1]]、1、3、および3ステップ上に回転した4番目のレイヤーはですが[[1,1,1],[1,1,0]]、その行は最後のレイヤーであるため、その後は回転しません。 すべてのレイヤーを再びまとめると、バイナリの自己回転3D配列が得られます。 [[[1,1,0], [1,0,0]], [[0,0,1], [1,1,1]], …

6
サンドパイルを倒す
(無限の砂山、および砂山のアイデンティティ要素を見つけることに関する関連する質問があります。) 負でない整数の行列が与えられた場合、同じ次元であるが倒れた行列を返します: マトリックスに4より大きい値が含まれていない場合は、それを返します。 3より大きいすべての「セル」は4ずつ削減され、直接隣接するすべてのセル(上、下、左、および右)は、存在する場合は増分されます。 後藤1。 例: 0 1 0 0 2 0 2 4 0 -> 3 0 1 0 0 3 0 1 3 1 2 3 2 3 4 2 5 1 4 1 2 0 3 3 0 3 3 0 3 3 4 5 6 -> …

11
1D Life-of-Life-ishモデルのシミュレーション
この質問は、コードレビューで傾向が出てきたばかりで、コードゴルフのチャレンジとして採用した方がいいと思いました。 ブール値として表されたx個の家の空でないリストが表示されます。毎日、家は隣接する家と競争しています。1は「アクティブ」な家を表し、0は「非アクティブ」な家を表します。特定の家の両側の隣人が両方ともアクティブまたは両方とも非アクティブである場合、その家は翌日に非アクティブになります。それ以外の場合はアクティブになります。 def get_state_as_pos(thelist, pos): if thelist[pos-1] == thelist[pos+1]: return 0 else: return 1 たとえば、隣人のグループ[0、1、0]がある場合、[1]の家は、左側と右側の家が両方とも非アクティブであるため、0になります。両端のセルは反対側もチェックするため、インデックス0の隣接length-1セルはインデックスとindexn1にあり、その逆も同様です。セルを更新した後でも、他のセルを更新するときは以前の状態を考慮して、各セルの状態情報が同時に更新されるようにする必要があります。 この関数は、状態の配列といくつかのステップを受け取り、指定されたステップ数の後の家の状態を出力する必要があります。 input: states = [1, 0, 0, 0, 0, 1, 0, 0], steps = 1 output should be [0, 1, 0, 0, 1, 0, 1, 1] input: states = [1, 1, 1, 0, 1, 1, …

2
ゴルフパターソンワームズ
パターソンのワームは、無限の三角形のグリッド上に存在するセルオートマトンの一種であり、すべてのステップで、ある方向に回転し、1つのユニットを移動します。彼らが定義している特性は、同じ場所を2回通過することは決してできないということです。同じ環境に出会うと、同じ決定を下します。ワームは、尾を3に配置し、頭をこの六角形の中心に配置して、常に独自の視点から「認識」します。 たとえば、次のルールを持つワームを考えます。 0、1、2、4、および5がすべて空白の場合、方向2に移動します 0、1、4、および5が空白で、2が満たされている場合、方向0に移動します 0、1、および5が空白で、2および4が満たされている場合、方向0に移動します これにより、次のパスが得られます(Wikipediaから)。 ワームは、周囲がすべて満たされている状況で自分自身を見つけると、終了します。 入力 数字のリスト。n番目の数字は、ワームが遭遇するn番目の新しい状況で、判断を下さなければならない場合にどのような判断を下すべきかを示しています。周囲の1つを除くすべてが満たされている場合、空の方向にのみ移動する必要があることに注意してください。これは「決定」としてカウントされず、数値を消費しません。上記のワームの例を生成するには、入力はになります[2, 0, 0]。入力はワームを生成することが保証されており、ワームは終了し、パスをリトレースしません。また、入力が短すぎることはありません。 出力 から始まるワームの頭の位置を示す座標のリストを出力し(1, 0)ます。上に移動して右に移動するとy値のみが減少し、上に移動して左に移動するとx値が減少してy値が減少することを考慮します。たとえば、入力例のパスの出力は次のとおりです。 (1, 0), (1, 1), (0, 0), (-1, -1), (0, -1), (0, 0), (0, 1), (-1, 0), (0, 0) テストケース javascriptスニペットを使用して、テストを実行することもできます。 [2,0,0]: (1,0),(1,1),(0,0),(-1,-1),(0,-1),(0,0),(0,1),(-1,0),(0,0) [1,0,4,0,1,5]: (1,0),(2,1),(2,2),(1,2),(0,1),(0,0),(0,-1),(1,-1),(2,0),(2,1),(3,1),(4,2),(4,3),(3,3),(2,2),(1,1),(1,0),(2,0),(3,1),(3,0),(4,0),(5,1),(5,2),(4,2),(3,2),(2,1),(1,1),(0,0),(-1,0),(-2,-1),(-2,-2),(-1,-2),(0,-1),(1,0),(1,-1),(2,-1),(3,0),(4,1),(4,2),(5,3),(5,4),(4,4),(3,3),(3,4),(2,4),(1,3),(1,2),(1,1),(0,1),(-1,0),(-1,1),(-2,1),(-3,0),(-3,-1),(-2,-1),(-1,-1),(0,0) [1,0,5,1]: (1,0),(2,1),(2,2),(1,2),(0,1),(0,0),(0,-1),(1,-1),(2,0),(2,1),(3,2),(3,3),(2,3),(1,2),(0,2),(-1,1),(-1,0),(0,0),(1,1),(1,2),(1,3),(0,3),(-1,2),(-1,1),(-2,0),(-2,-1),(-1,-1),(0,0) [2,0,1,0]: (1,0),(1,1),(0,0),(-1,-1),(0,-1),(0,0),(-1,0),(-1,-1),(-1,-2),(0,-1),(1,0),(2,1),(1,1),(0,1),(0,0) 次の急いで組み立てられた(おそらくバグのある)プログラムは、ワームを表示します。 コードスニペットを表示 var canvas = document.querySelector("canvas"); var ctx …

9
奇妙なオートマトンを実装する
私はセルオートマトンで遊んでいて、いくつかの興味深い動作をしているものを見つけました。仕組みは次のとおりです。 バイナリ文字列を左から右に読み取ります。1その後に2他の値が続く場合0、結果にa を追加して読み取りを続けます。に遭遇した場合0(または、残っている値が3つ未満の場合)、現在の値とaを追加して1読み取りを続行します。文字列の最後1に、結果にシングルを追加します。 これは、1世代の解決例です 01011111 ^ 最初に遭遇する0ので01、結果に追加します 01011111 ^ 01 ここでa 1が発生したため、ゼロを追加して次の2つの値をスキップします 01011111 ^ 010 私たちは別の1ものに遭遇するので、同じことをします 01011111 ^ 0100 現在1、ジャンプするのに十分ではない別のスペースがあるので、現在のセルと1(この場合は11)を追加します 01011111 ^ 010011 最後にいるので、単一を追加して1この世代を終了します 01011111 ^ 0100111 仕事 任意の妥当な形式の入力を指定すると、オートマトンの1世代を計算する関数またはプログラムを作成する必要があります。 これはコードゴルフの質問なので、回答はバイト単位で記録され、バイト数は少ない方が良いでしょう。 サンプル実装 Haskellのサンプル実装を次に示します(関数を定義しますdが、プログラムは無限に繰り返しを出力します)。 d('1':_:_:x) = "0" ++ d x d(a:x) = a:'1':d x d x = "1" r x = x:map …

4
ゲーム・オブ・ライフと疲労
StewieのGame of Life and Fatigueは、より有名なConwayのGame of Lifeによく似ています。 StewieのGame of Life and Fatigue(GoLF)の宇宙は、正方形のセルの無限の2次元直交グリッドであり、それぞれが生きている、死んでいる、または疲れている、3つの可能な状態の1つにあります。すべてのセルは、隣接する8つのセル(水平、垂直、または斜めに隣接するセル)と相互作用します。時間の各ステップで、次の遷移が発生します。 人口が少ないことが原因であるかのように、生存細胞が2つ未満の生存細胞は死にます。 2つまたは3つの生きている隣人を持つ生きている細胞は、次の世代まで生き続けます。 過密状態のように、3つ以上の隣接セルを持つ生存細胞は死にます。 ちょうど3つの生きている隣人がいる死んだ細胞は、まるで生殖のように生きている細胞になります。 2世代連続して生存していた細胞は、まるで疲労のように死にます。次世代になるまで、再び目覚めることはできません 入力グリッドの境界の外側にあるセルは、崖から落ちたように死んでいます。 チャレンジ: あなたの課題は、GoLFの初期状態を表すn行m列の次元のグリッドと整数pを取り、p世代後のゲームの状態を出力することです。 ルール: 入力形式と出力形式はオプションですが、入力/出力グリッドは同じ表現でなければなりません 印刷可能なシンボルを選択して、生細胞と死細胞を表すことができます(私は1生細胞と0死細胞に使用します)。 インデックスが0か1かを選択できます。例でp=1は、は1ステップ後の状態を意味します。 各言語で最短のコードが優先されます セルラーオートメーションの組み込み機能が許可されています テストケース: 例では、pではなく、入力に入力グリッドのみを含めています。さまざまなp値の出力を提供しました。与えられた入力pに対応するグリッドのみを出力します。 Input: 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 …

3
セルオートマトンのシーケンスの特定
バックグラウンド この課題のために、n-stateセルオートマトンはf、状態セットから2つの数値{0, 1, ..., n-1}を入力として受け取り、そのセットから別の数値を出力として返す単純なバイナリ関数です。これは、少なくとも2の長さの数値のリストに適用できます。L = [x0, x1, x2, ..., xk-1] f(L) = [f(x0, x1), f(x1, x2), f(x2, x3), ..., f(xk-2, xk-1)] 結果のリストの要素は元のリストより1つ少ないことに注意してください。時空図のfから始まるは、L繰り返し適用して得られたリストのリストであるfとL、リスト内の結果を収集します。最終的なリストの長さは1です。状態セットのすべての2要素リストが、時空間図のいくつかの行の連続したサブリストである場合、リストLはの識別シーケンスであると言います。これは、他の状態のCAがその正確な時空図を持たないという条件と同等です。fLn 入力 入力は、nx行n整数の行列M、L長さが2以上の整数のリスト、およびオプションで数値nです。マトリックスがM定義n-state CA fによってf(a,b) = M[a][b](0ベースのインデックスを使用して)。これは、ことが保証されn > 0、そのMとLのみ状態集合の要素を含みます{0, 1, ..., n-1}。 出力 LCAの識別シーケンスである場合、出力は一貫した真の値fであり、それ以外の場合は一貫した偽の値になります。これは、すべての「はい」インスタンスは同じ真理値をもたらし、すべての「いいえ」インスタンスは同じ偽値をもたらすことを意味します。 例 入力を考えてみましょうn = 2、M = [[0,1],[1,0]]とL = [1,0,1,1]。マトリックスは、MバイナリXORオートマトンを定義f(a,b) = a+b mod 2し、時空図最低LIS 1 0 …

2
税歴史家
前書き 彼の王国の税金を管理することに問題を抱えている徴税人がいます:歴史的な記録は大火事で焼失しました。 彼は、現在のお金がどこから受け継がれたかという点で、過去の可能性がいくつあるかを知りたいと思っています。幸いなことに、彼の王国は非常に単純です。 王国は2Dブール行列によってモデル化できます。ここで、はlお金を相続した人と、相続Oしていない人を表します。例えば: l O l l O O O l l O l O O O O l (常に長方形になります) 次の世代では、王国は小さくなります(狼は強いです!)。 次の世代はこのようになり、前の世代に重ね合わされます(x次の世代の子孫のプレースホルダーです) l O l l x x x O O O l x x x l O l O x x x O O O l (左上がそう子孫は、それらの周りに直接ある先祖を見ていきx{表示されl、O、O、O}と呼ばれる、アンアラインド矩形近傍) 祖先が1人だけお金を受け継いだ場合、子孫は彼らからお金を受け継ぎます。複数の祖先がお金を相続した場合、彼らはつまずき、子孫は結局お金を相続しないことになります。誰もお金を相続していない場合、子孫はお金を相続しません。 …

3
CCC 2016:サークルオブライフ
始める前に、この課題はもともと私のものではありませんでした ウォータールー大学の功績。これは、Canadian Computing Competition 2016、Senior Problem 5によるものです。コンテストPDFへのクリック可能なリンクは次のとおりです。 http://cemc.uwaterloo.ca/contests/computing/2016/stage%201/seniorEn.pdf ここにサイトへのリンクがあります: http://cemc.uwaterloo.ca/contests/past_contests.html チャレンジ 2つの定数値のラッピング配列を指定してn、正の整数入力の進化後の構成を決定しますn。これらの2つの値は、生細胞と死細胞を表します。進化は次のように機能します。 進化! 各反復の後、前の反復でちょうど1つの生きている隣接セルがあった場合、セルは生きています。少なくてもそれは孤独で死ぬ。それ以上、それは過密状態で死にます。近傍は排他的です。つまり、各セルには3つではなく2つの隣接があります。 たとえば、生細胞と死細胞が1001011010どこにあるかを見てみましょう。10 (0) 1 0 0 1 0 1 1 0 1 0 (1) * $ % の細胞はその*両側に死んだ細胞を持っているので、孤独で死ぬ。 の細胞の$片側には生細胞、もう一方には死細胞があります。生きている。 のセルの%両側には生細胞があるため、過密状態では死んでいます。 受賞基準 最短のコードが勝ちます。 I / O 入力は、2つの一貫した値としてのセルの状態のリストと、入力の数を表す整数です。出力は、指定された回数の反復後のセル状態のリストになります。 テストケース start, iterations -> end 1001011010, 1000 -> 1100001100 100101011010000, 100 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.