Фон
Для цілей цього виклику, державний n
стільниковий автомат - це просто двійкова функція, f
яка приймає два числа з набору стану {0, 1, ..., n-1}
як входи і повертає інше число з цього набору як вихід. Він може бути застосований до списку чисел довжиною не менше 2 балівL = [x0, x1, x2, ..., xk-1]
f(L) = [f(x0, x1), f(x1, x2), f(x2, x3), ..., f(xk-2, xk-1)]
Зауважте, що в отриманому списку є один менший елемент, ніж оригінал. Просторово - тимчасова схема , з f
починаючи з L
списком списків , отриманих шляхом багаторазового застосування f
до L
, і збираючи результати у вигляді списку. Кінцевий список має довжину 1. Ми говоримо, що список L
є ідентифікаційною послідовністю для f
, якщо кожен двоелементний список над набором станів є суміжним підспілом деякого рядка діаграми проміжок часу, починаючи з цього L
. Це еквівалентно умові, що жодна інша n
держава CA не має такої точної діаграми простір-часу.
Вхідні дані
Входи є n
матрицею з розмірністю n
целочисленной матрицею M
, списком цілих чисел L
довжиною , щонайменше 2, і , можливо , кількість n
. Матриця M
визначає n
CA-державу f
за f(a,b) = M[a][b]
допомогою (використовуючи індексацію на основі 0). Це гарантує , що n > 0
, і що M
і L
містить тільки елементи державного набору {0, 1, ..., n-1}
.
Вихідні дані
Вихід повинен бути узгодженим значенням, якщо L
воно є ідентифікуючою послідовністю для СА f
, і послідовним помилковим значенням в іншому випадку. Це означає, що всі "так" -речовини призводять до однакового значення, а всі "ні" -речовини призводять до однакової помилкової цінності.
Приклад
Розглянемо входи n = 2
, M = [[0,1],[1,0]]
і L = [1,0,1,1]
. Матриця M
визначає двійковий XOR автомат f(a,b) = a+b mod 2
, і просторово - тимчасова схема , починаючи з L
IS
1 0 1 1
1 1 0
0 1
1
Ця діаграма не містить 0 0
жодного рядка, тому L
не є ідентифікаційною послідовністю, а правильним є вихід False
. Якщо ми введемо L = [0,1,0,0]
замість цього, діаграма простору - це час
0 1 0 0
1 1 0
0 1
1
Рядки цієї діаграми містять усі пари, проведені з набору стану, а саме 0 0
- 0 1
, 1 0
і 1 1
- так L
є ідентифікаційна послідовність і правильний вихід True
.
Правила
Ви можете написати повну програму або функцію. Виграє найменший байт, а стандартні лазівки заборонені.
Випробування
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