前書き
この課題では、非常に悪い擬似乱数を使用して、特定の確率的セルオートマトンをシミュレートします。セルオートマトンは、次のローカルルールによってバイナリ文字列で定義されます。セルの左隣とセル自体に状態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
最も境界のビットが常に1
sであることに注意してください。あなたの仕事は、この形式のセルオートマトンの進化を生み出すことです。
インプット
入力は、n
表示する行数を示す正の整数と、L
ランダム性のソースとして使用する空でないビットのリストです。
出力
出力は、リストのリストまたはビットの2D配列であり、上の図のように、時間ステップ1
に対する単一の進化をn
表します。0
必要に応じて、出力にsを埋め込み、同じ長さの行を取得できますが、先頭に0
s があってはなりません。
セルオートマトンのランダムな選択は、リストから引き出され、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
。これはL
2.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を前に挿入する方法を見つけます)