前書き
この課題では、非常に悪い擬似乱数を使用して、特定の確率的セルオートマトンをシミュレートします。セルオートマトンは、次のローカルルールによってバイナリ文字列で定義されます。セルの左隣とセル自体に状態aとがあると仮定しbます。
- の場合
min(a,b) == 0、新しい状態はbですmax(a,b)。 - の場合
min(a,b) == 1、の新しい状態がbからランダムに選択され{0,1}ます。
次の図は、単一のの可能な10段階の進化を示しています1。
1
11
101
1111
11001
101011
1111111
10001001
110011011
1010111101
隣接する2つ1のsが時々に1、そして時にはに進化し、0最も境界のビットが常に1sであることに注意してください。あなたの仕事は、この形式のセルオートマトンの進化を生み出すことです。
インプット
入力は、n表示する行数を示す正の整数と、Lランダム性のソースとして使用する空でないビットのリストです。
出力
出力は、リストのリストまたはビットの2D配列であり、上の図のように、時間ステップ1に対する単一の進化をn表します。0必要に応じて、出力にsを埋め込み、同じ長さの行を取得できますが、先頭に0s があってはなりません。
セルオートマトンのランダムな選択は、リストから引き出され、L使い果たされたときに最初に戻ります。より明確に、出力が上から下、左から右の形式で一度に1行を横断する場合、連続するランダムな選択はL、必要な回数だけ繰り返されるリストを形成するものとします。
例
入力がn = 7とであるとしL = [0,1,0]ます。その後、セルラオートマトンは、7つのステップで次のように進化します。ここでは、vランダムな選択のすぐ上に配置します。
[1]
[1,1]
v
[1,0,1]
[1,1,1,1]
v v v
[1,1,0,0,1]
v
[1,1,1,0,1,1]
v v v
[1,0,0,1,1,1,1]
a vでマークされたすべてのビットを読み取ると、が得られます01001001。これはL2.66回繰り返されます。次のランダムビットはになります0。
ルールとスコアリング
完全なプログラムまたは関数を作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。入力と出力の正確な形式は重要ではありません(理由の範囲内)。
テストケース
決定論的なバージョン、すべてのランダムビットは0次のとおりです。
Inputs: 10 [0]
Output:
1
11
101
1111
10001
110011
1010101
11111111
100000001
1100000011
すべてのランダムビットは1次のとおりです。
Inputs: 6 [1,1]
Output:
1
11
111
1111
11111
111111
擬似ランダムバージョン:
Inputs: 10 [0,0,1]
Output:
1
11
101
1111
10101
111111
1010011
11110101
101011111
1111101001
Inputs: 10 [1,0,0,1]
Output:
1
11
111
1001
11011
111111
1001101
11010111
111111101
1011001111
Inputs: 15 [1,1,1,0,0,0]
Output:
1
11
111
1111
10001
110011
1110111
11011001
111111011
1100011111
11100100011
111101100101
1001111101111
11011000111111
101101001011101
min(a,b)とa+b>1し、max(a,b)でa+b?おそらく、最初のケースを処理するために何かをする必要があると思います1->11(できると思いますL=[1]+f()...。またはL、2番目の行で常に1をポップするため、1を前に挿入する方法を見つけます)