Фон
Для цілей цього виклику, державний 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визначає nCA-державу 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, і просторово - тимчасова схема , починаючи з LIS
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