tło
Tak, fizyka bitstrów to prawdziwa rzecz . Chodzi o to, aby skonstruować nową teorię fizyki przy użyciu tylko ciągów bitów, które ewoluują zgodnie z regułą probabilistyczną ... Pomimo przeczytania kilku artykułów na ten temat, nadal jestem dość zdezorientowany. Jednak wszechświat bitstrowy tworzy fajny mały golf.
Program Universe
Fizyka bitów ma miejsce w tak zwanym wszechświecie programowym . Na każdym etapie ewolucji wszechświata istnieje skończona lista L
ciągów bitów o pewnej długości k
, zaczynająca się od dwuelementowej listy [10,11]
gdzie k = 2
. Jeden timepep jest przetwarzany w następujący sposób (w pseudokodzie podobnym do Pythona).
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
Wszystkie losowe wybory są jednakowo losowe i niezależne od siebie.
Przykład
Przykładowa ewolucja 4 kroków może wyglądać następująco. Zacznij od początkowej listy L
:
10
11
Losowo wybieramy A := 10
i B := 10
, które są tym samym rzędem, co oznacza, że musimy rozszerzyć każdy ciąg L
o losowy bit:
101
110
Następnie możemy wybrać A := 101
i B := 110
, a ponieważ nie są one równe, dodamy ich do XOR L
:
101
110
011
Następnie możemy wybrać A := 011
i B := 110
, i ponownie dołączyć ich XOR:
101
110
011
101
Na koniec wybieramy A := 101
(ostatni wiersz) i B := 101
(pierwszy wiersz), które są równe, dlatego rozszerzamy losowymi bitami:
1010
1100
0111
1010
Zadanie
Twoim zadaniem jest przyjęcie nieujemnej liczby całkowitej t
jako danych wejściowych, symulacja wszechświata programu pod kątem t
kroków czasowych i zwrócenie lub wydrukowanie wynikowej listy L
. Zauważ, że t = 0
wynikiem jest początkowa lista [10,11]
. Możesz wyprowadzać L
jako listę list liczb całkowitych, listę wartości boolowskich lub listę ciągów; jeśli wyjście przechodzi do STDOUT, możesz także wydrukować ciągi bitów po jednym w wierszu w rozsądnym formacie. Kolejność ciągów bitów jest znacząca; w szczególności, początkowa lista nie może być [11,10]
, [01,11]
lub coś podobnego. Zarówno funkcje, jak i pełne programy są dopuszczalne, standardowe luki są niedozwolone, a wygrywa najmniejsza liczba bajtów.