sfondo
Ai fini di questa sfida, un n
automa cellularef
statale è semplicemente una funzione binaria che accetta due numeri dallo stato impostato {0, 1, ..., n-1}
come input e restituisce un altro numero da tale set come output. Può essere applicato a un elenco di numeri di lunghezza almeno 2 diL = [x0, x1, x2, ..., xk-1]
f(L) = [f(x0, x1), f(x1, x2), f(x2, x3), ..., f(xk-2, xk-1)]
Si noti che l'elenco risultante ha un elemento in meno rispetto all'originale. Un diagramma spazio-temporale di f
partire da L
una lista degli elenchi ottenuti da applicare ripetutamente f
a L
, e raccogliendo i risultati in un elenco. L'elenco finale ha lunghezza 1. Diciamo che l'elenco L
è una sequenza identificativa per f
, se ogni elenco di due elementi sopra l'insieme di stati è un sottoelenco contiguo di una riga del diagramma dello spaziotempo a partire da L
. Ciò equivale alla condizione che nessun altro stato n
CA abbia quel diagramma spazio-tempo esatto.
Ingresso
Gli ingressi sono un n
-by- n
matrice numero intero M
, un elenco di interi L
di lunghezza almeno 2, e facoltativamente il numero n
. La matrice M
definisce una n
CA statale f
mediante f(a,b) = M[a][b]
(utilizzando l'indicizzazione basata su 0). È garantito che n > 0
, e che M
e L
contengono solo elementi dello stato impostato {0, 1, ..., n-1}
.
Produzione
L'output deve essere un valore di verità coerente se L
è una sequenza identificativa per la CA f
e un valore di falsa coerente in caso contrario. Ciò significa che tutte le istanze "sì" danno lo stesso valore di verità e tutte le istanze "no" danno lo stesso valore di falsità.
Esempio
Considerare gli ingressi n = 2
, M = [[0,1],[1,0]]
e L = [1,0,1,1]
. La matrice M
definisce l'automa XOR binario f(a,b) = a+b mod 2
e il diagramma dello spaziotempo a partire da L
è
1 0 1 1
1 1 0
0 1
1
Questo diagramma non contiene 0 0
alcuna riga, quindi L
non è una sequenza identificativa e l'output corretto è False
. Se L = [0,1,0,0]
invece inseriamo , il diagramma dello spaziotempo è
0 1 0 0
1 1 0
0 1
1
Le righe di questo diagramma contengono tutte le coppie presenti nel set di stato, cioè 0 0
, 0 1
, 1 0
e 1 1
, quindi L
è una sequenza di identificazione e l'uscita corretta è True
.
Regole
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard.
Casi test
Trivial automaton
[[0]] [0,0] 1 -> True
Binary XOR
[[0,1],[1,0]] [1,0,1,1] 2 -> False
[[0,1],[1,0]] [1,0,1,0] 2 -> True
[[0,1],[1,0]] [0,1,0,0] 2 -> True
Addition mod 3
[[0,1,2],[1,2,0],[2,0,1]] [0,1,1,0,0,0,1,0,0] 3 -> False
[[0,1,2],[1,2,0],[2,0,1]] [0,1,1,0,0,0,1,0,1] 3 -> True
Multiplication mod 3
[[0,0,0],[0,1,2],[0,2,1]] [0,1,1,2,0,0,1,0,1] 3 -> False
[[0,0,0],[0,1,2],[0,2,1]] [0,1,1,2,2,2,1,0,1] 3 -> True
Some 4-state automata
[[3,2,2,1],[0,0,0,1],[2,1,3,1],[0,1,2,3]] [0,0,0,0,1,1,1,1] 4 -> False
[[3,2,2,1],[0,0,0,1],[2,1,3,1],[0,1,2,3]] [0,0,0,1,0,1,1,1] 4 -> False
[[3,2,2,1],[0,0,0,1],[2,1,3,1],[0,1,2,3]] [0,1,2,3,3,1,2,3,0] 4 -> True
[[0,1,2,1],[1,0,2,0],[2,2,1,0],[1,2,0,0]] [0,0,1,1,2,2,0,2,1] 4 -> False
[[0,1,2,1],[1,0,2,0],[2,2,1,0],[1,2,0,0]] [0,3,1,3,2,3,3,0,1] 4 -> False
[[0,1,2,1],[1,0,2,0],[2,2,1,0],[1,2,0,0]] [0,3,1,3,2,3,3,0,1,2] 4 -> True