sfondo
Sì, la fisica del bittring è una cosa reale . L'idea è quella di costruire una nuova teoria della fisica usando solo stringhe di bit che si evolvono sotto una regola probabilistica ... o qualcosa del genere. Nonostante abbia letto un paio di articoli a riguardo, sono ancora piuttosto confuso. Tuttavia, l'universo bitstring rende un piccolo codice golf.
Programma Universo
La fisica della bitstring si svolge in un cosiddetto universo del programma . Ad ogni passo dell'evoluzione dell'universo, esiste un elenco finito L
di stringhe di bit di una certa lunghezza k
, a partire dall'elenco a due elementi in [10,11]
cui k = 2
. Un timestep viene elaborato come segue (nello pseudocodice simile a Python).
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
Tutte le scelte casuali sono uniformemente casuali e indipendenti l'una dall'altra.
Esempio
Un'evoluzione di esempio di 4 passaggi potrebbe essere simile alla seguente. Inizia con l'elenco iniziale L
:
10
11
Scegliamo casualmente A := 10
e B := 10
, che sono la stessa riga, il che significa che dobbiamo estendere ogni stringa L
con un bit casuale:
101
110
Quindi, scegliamo A := 101
e B := 110
, e poiché non sono uguali, aggiungiamo il loro XOR a L
:
101
110
011
Quindi, scegliamo A := 011
e B := 110
, e di nuovo, aggiungiamo il loro XOR:
101
110
011
101
Infine, scegliamo A := 101
(ultima riga) e B := 101
(prima riga), che sono uguali, quindi estendiamo con bit casuali:
1010
1100
0111
1010
L'obiettivo
Il tuo compito è prendere un intero non negativo t
come input, simulare l'universo del programma per i t
timestep e restituire o stampare l'elenco risultante L
. Si noti che t = 0
risulta nell'elenco iniziale [10,11]
. È possibile produrre L
un elenco di elenchi di numeri interi, un elenco di elenchi di valori booleani o un elenco di stringhe; se l'output va su STDOUT, puoi anche stampare le stringhe di bit una per riga in un formato ragionevole. L'ordine delle stringhe di bit è significativo; in particolare, l'elenco iniziale non può essere [11,10]
, [01,11]
o qualcosa di simile. Sono accettabili sia le funzioni che i programmi completi, le scappatoie standard sono vietate e vince il conteggio di byte più basso.