Hintergrund
Für die Zwecke dieser Herausforderung ist ein n
zellularer Automat mit einfachem f
Zustand einfach eine Binärfunktion , die zwei Zahlen aus dem {0, 1, ..., n-1}
als Eingaben eingestellten Zustand nimmt und eine andere Zahl aus dieser Menge als Ausgabe zurückgibt. Es kann auf eine Liste von Zahlen mit einer Länge von mindestens 2 mal angewendet werdenL = [x0, x1, x2, ..., xk-1]
f(L) = [f(x0, x1), f(x1, x2), f(x2, x3), ..., f(xk-2, xk-1)]
Beachten Sie, dass die resultierende Liste ein Element weniger enthält als das Original. Ein Raumzeitdiagramm zum f
Starten von L
ist die Liste der Listen, die durch wiederholtes Anwenden f
auf L
und Sammeln der Ergebnisse in einer Liste erhalten werden. Die endgültige Liste hat die Länge 1. Wir sagen, dass die Liste L
eine identifizierende Sequenz für ist f
, wenn jede Liste mit zwei Elementen über dem Statussatz eine zusammenhängende Unterliste einer Zeile des Raumzeitdiagramms ist, beginnend mit L
. Dies entspricht der Bedingung, dass keine andere n
CA mit genauem Raumzeitdiagramm vorliegt.
Eingang
Ihre Eingänge sind eine n
-by- n
ganzzahlige Matrix M
, wird eine Liste von ganzen Zahlen mit L
einer Länge von mindestens 2 ist , und gegebenenfalls die Zahl n
. Die Matrix M
definiert eine n
CA f
mit dem Status " f(a,b) = M[a][b]
(unter Verwendung der 0-basierten Indizierung). Es ist garantiert, dass n > 0
und dass M
und L
nur Elemente der Zustandsmenge enthalten sind {0, 1, ..., n-1}
.
Ausgabe
Ihre Ausgabe muss ein konsistenter Wahrheitswert sein, wenn L
es sich um eine identifizierende Sequenz für die f
Zertifizierungsstelle handelt, und ansonsten ein konsistenter Falschwert. Dies bedeutet, dass alle "Ja" -Instanzen den gleichen Wahrheitswert und alle "Nein" -Instanzen den gleichen Falschwert ergeben.
Beispiel
Betrachten Sie die Eingänge n = 2
, M = [[0,1],[1,0]]
und L = [1,0,1,1]
. Die Matrix M
definiert die binären XOR - Automaten f(a,b) = a+b mod 2
, und das Raum - Zeit - Diagramm von Ausgang L
IST
1 0 1 1
1 1 0
0 1
1
Dieses Diagramm enthält 0 0
keine Zeile, L
ist also keine identifizierende Sequenz und die richtige Ausgabe ist False
. Wenn wir L = [0,1,0,0]
stattdessen eingeben, ist das Raumzeitdiagramm
0 1 0 0
1 1 0
0 1
1
Die Zeilen dieses Diagramms alle Paare von den Zustand versetzt gezeichnet enthalten, nämlich 0 0
, 0 1
, 1 0
und 1 1
, so L
ist eine Identifizierungssequenz und die korrekte Ausgabe ist True
.
Regeln
Sie können ein vollständiges Programm oder eine Funktion schreiben. Die niedrigste Byteanzahl gewinnt und Standardschlupflöcher sind nicht zulässig.
Testfälle
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