fundo
Para os propósitos deste desafio, um n
autômato celular do estado é simplesmente uma função binária f
que pega dois números do conjunto de estados {0, 1, ..., n-1}
como entradas e retorna outro número desse conjunto como saída. Pode ser aplicado a uma lista de números de comprimento de pelo menos 2 porL = [x0, x1, x2, ..., xk-1]
f(L) = [f(x0, x1), f(x1, x2), f(x2, x3), ..., f(xk-2, xk-1)]
Observe que a lista resultante possui um elemento a menos que o original. Um diagrama de espaço-tempo de f
partida L
da lista de listas obtidos por aplicação repetida f
para L
, e recolher os resultados de uma lista. A lista final possui o comprimento 1. Dizemos que a lista L
é uma sequência de identificação para f
, se cada lista de dois elementos no conjunto de estados for uma sub-lista contígua de alguma linha do diagrama de espaço-tempo a partir de L
. Isso é equivalente à condição de que nenhuma outra n
CA do estado tenha esse diagrama de espaço-tempo exato.
Entrada
Suas entradas são uma n
-by- n
matriz inteiro M
, uma lista de números inteiros L
de comprimento, pelo menos, duas, e, opcionalmente, o número n
. A matriz M
define uma n
CA f
do estado f(a,b) = M[a][b]
(usando a indexação baseada em 0). É garantido que n > 0
, e que M
e L
apenas contêm elementos do conjunto de estados {0, 1, ..., n-1}
.
Resultado
Sua saída deve ser um valor de verdade consistente se L
for uma sequência de identificação para a CA f
e, caso contrário, um valor de falsy consistente. Isso significa que todas as instâncias "sim" resultam no mesmo valor verdadeiro e todas as instâncias "não" resultam no mesmo valor falso.
Exemplo
Considere as entradas n = 2
, M = [[0,1],[1,0]]
e L = [1,0,1,1]
. A matriz M
define o autômato binário XOR f(a,b) = a+b mod 2
e o diagrama de espaço-tempo a partir de L
é
1 0 1 1
1 1 0
0 1
1
Este diagrama não contém 0 0
nenhuma linha, portanto, L
não é uma sequência de identificação e a saída correta é False
. Se introduzirmos L = [0,1,0,0]
, o diagrama de espaço-tempo é
0 1 0 0
1 1 0
0 1
1
As linhas deste diagrama de conter todos os pares retiradas do conjunto de estado, ou seja 0 0
, 0 1
, 1 0
e 1 1
, portanto, L
é uma sequência de identificação e a saída correcta é True
.
Regras
Você pode escrever um programa completo ou uma função. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
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