Hintergrund
Ja, Bitstring-Physik ist eine echte Sache . Die Idee ist, eine neue Theorie der Physik zu konstruieren, die nur Bitketten verwendet, die sich unter einer Wahrscheinlichkeitsregel entwickeln ... oder so. Obwohl ich ein paar Artikel darüber gelesen habe, bin ich immer noch ziemlich verwirrt. Das Bitstring-Universum ist jedoch ein schönes kleines Codegolf.
Programmuniversum
Die Bitstring-Physik findet in einem sogenannten Programmuniversum statt . Bei jedem Schritt der Entwicklung des Universums gibt es eine endliche Liste L
von Bitfolgen mit einer gewissen Länge k
, beginnend mit der Zwei-Elemente-Liste, [10,11]
in der k = 2
. Ein Zeitschritt wird wie folgt verarbeitet (im Python-ähnlichen Pseudocode).
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
Alle Zufallsentscheidungen sind einheitlich zufällig und voneinander unabhängig.
Beispiel
Eine beispielhafte Entwicklung von 4 Schritten könnte wie folgt aussehen. Beginnen Sie mit der Anfangsliste L
:
10
11
Wir wählen zufällig A := 10
und B := 10
, welche die gleiche Zeile sind, was bedeutet, dass wir jeden String L
mit einem zufälligen Bit erweitern müssen:
101
110
Als nächstes wählen wir A := 101
und B := 110
, und da sie nicht gleich sind, fügen wir ihre XOR hinzu zu L
:
101
110
011
Dann wählen wir A := 011
und B := 110
und hängen wieder ihre XOR an:
101
110
011
101
Schließlich wählen wir A := 101
(letzte Reihe) und B := 101
(erste Reihe), die gleich sind, also erweitern wir mit zufälligen Bits:
1010
1100
0111
1010
Die Aufgabe
Ihre Aufgabe ist es, eine nichtnegative Ganzzahl t
als Eingabe zu verwenden, das Programmuniversum für t
Zeitschritte zu simulieren und die resultierende Liste zurückzugeben oder auszudrucken L
. Beachten Sie, dass t = 0
sich die ursprüngliche Liste ergibt [10,11]
. Sie können L
eine Liste mit ganzen Zahlen, Listen mit booleschen Werten oder eine Liste mit Zeichenfolgen ausgeben . Wenn die Ausgabe an STDOUT geht, können Sie die Bitstrings auch einzeln pro Zeile in einem angemessenen Format drucken. Die Reihenfolge der Bitfolgen ist signifikant; insbesondere kann die erste Liste nicht sein [11,10]
, [01,11]
oder so etwas. Sowohl Funktionen als auch vollständige Programme sind akzeptabel, Standardlücken sind nicht zulässig, und die niedrigste Bytezahl gewinnt.