バックグラウンド
はい、ビットストリング物理学は本物です。アイデアは、確率論的ルール...または何かの下で進化するビット列のみを使用して、物理学の新しい理論を構築することです。それについていくつかの論文を読んだにもかかわらず、私はまだかなり混乱しています。ただし、ビットストリングユニバースは、素敵な小さなコードゴルフを実現します。
プログラムユニバース
ビットストリング物理学は、いわゆるプログラムユニバースで行われます。宇宙の進化の各ステップには、2要素のリストで始まる、L
長さのあるビット文字列の有限リストがあります。1つのタイムステップは、次のように処理されます(Pythonのような擬似コード)。k
[10,11]
k = 2
A := random element of L
B := random element of L
if A == B:
for each C in L:
append a random bit to C
else:
append the bitwise XOR of A and B to L
すべてのランダムな選択は、一様にランダムであり、互いに独立しています。
例
4ステップの進化の例は次のようになります。最初のリストから始めますL
。
10
11
同じ行であるA := 10
とをランダムに選択しますB := 10
。つまり、各文字列をL
ランダムビットで拡張する必要があります。
101
110
次に、我々は選択A := 101
してB := 110
、それらが等しくないので、我々は彼らのXORを追加しますL
:
101
110
011
次に、とを選択A := 011
しB := 110
、再びXORを追加します。
101
110
011
101
最後に、A := 101
(最後の行)とB := 101
(最初の行)を選択します。これらは等しいため、ランダムビットで拡張します。
1010
1100
0111
1010
タスク
あなたの仕事はt
、入力として負でない整数を取り、t
タイムステップのプログラムユニバースをシミュレートし、結果のリストを返すか印刷することL
です。その注意t = 0
初期リストに結果を[10,11]
。L
整数のリストのリスト、ブール値のリストのリスト、または文字列のリストとして出力できます。出力がSTDOUTに送られた場合、ビットストリングを適切な形式で1行に1つずつ印刷することもできます。ビット列の順序は重要です。特に、最初のリストを[11,10]
、[01,11]
またはそのようなものにすることはできません。関数と完全なプログラムの両方が許容され、標準の抜け穴は許可されず、最小のバイト数が優先されます。