Contexte
Pour les besoins de ce défi, un n
automate cellulaire à l'état est simplement une fonction binaire f
qui prend deux nombres de l'ensemble d'états {0, 1, ..., n-1}
en entrée et renvoie un autre nombre de cet ensemble en sortie. Il peut être appliqué à une liste de nombres de longueur au moins 2 parL = [x0, x1, x2, ..., xk-1]
f(L) = [f(x0, x1), f(x1, x2), f(x2, x3), ..., f(xk-2, xk-1)]
Notez que la liste résultante contient un élément de moins que l'original. Un diagramme d'espace - temps de f
démarrage à partir de L
la liste des listes obtenues en appliquant de façon répétée f
à L
, et la collecte des résultats dans une liste. La liste finale a une longueur 1. Nous disons que la liste L
est une séquence d'identification pour f
, si chaque liste à deux éléments sur l'ensemble d'états est une sous-liste contiguë d'une ligne du diagramme d'espace-temps à partir de L
. Cela équivaut à la condition qu'aucune autre n
autorité de certification à l'état ne dispose de ce diagramme d'espace-temps exact.
Contribution
Vos entrées sont une matrice n
-par- n
entier M
, une liste d'entiers L
de longueur au moins 2, et éventuellement le nombre n
. La matrice M
définit une n
autorité f
de certification -état par f(a,b) = M[a][b]
(en utilisant une indexation basée sur 0). Il est garanti que n > 0
, et que M
et L
ne contiennent que des éléments de l'ensemble d'états {0, 1, ..., n-1}
.
Production
Votre sortie doit être une valeur véridique cohérente s'il L
s'agit d'une séquence d'identification pour l'AC f
, et une valeur faussement cohérente dans le cas contraire. Cela signifie que tous les cas de «oui» donnent la même valeur de vérité et tous les cas de «non» donnent la même valeur de faux.
Exemple
Tenez compte des entrées n = 2
, M = [[0,1],[1,0]]
et L = [1,0,1,1]
. La matrice M
définit l'automate XOR binaire f(a,b) = a+b mod 2
, et le diagramme espace-temps à partir de L
est
1 0 1 1
1 1 0
0 1
1
Ce diagramme ne contient 0 0
aucune ligne, il L
ne s'agit donc pas d'une séquence d'identification et la sortie correcte l'est False
. Si nous saisissons à la L = [0,1,0,0]
place, le diagramme d'espace-temps est
0 1 0 0
1 1 0
0 1
1
Les lignes de ce diagramme contiennent toutes les paires tirées de l'ensemble de l' état, à savoir 0 0
, 0 1
, 1 0
et 1 1
, donc L
est une séquence d' identification et la sortie correcte est True
.
Règles
Vous pouvez écrire un programme complet ou une fonction. Le nombre d'octets le plus bas gagne et les failles standard sont interdites.
Cas de 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