Напишите программу, которая определит, представляет ли данная матрица квандл. Quandle представляет собой набор оснащен одной (некоммутативном, неассоциативная) операциями ◃ , которая удовлетворяет следующие аксиомы:
- Операция закрыта, это означает, что
a◃b = c
всегда является элементом множества ifa
иb
являются элементами множества. - Операция является правой-самораспределительной
(a◃b)◃c = (a◃c)◃(b◃c)
. - Операция делится справа: для любой выбранной пары
a
иb
существует один уникальный,c
такой, чтоc◃a = b
- Операция идемпотентна:
a◃a = a
Конечный квандл может быть представлен в виде квадратной матрицы. Ниже приведен пример квандла порядка 5 ( источник ).
0 0 1 1 1
1 1 0 0 0
3 4 2 4 3
4 2 4 3 2
2 3 3 2 4
Значение, расположенное в n-й строке и m-м столбце (0-индексированное), является значением n◃m. Например, в этом квандле 4◃1 = 3
. Некоторые свойства квандла легко увидеть из этой матрицы:
- Он закрыт, потому что в этой матрице 5x5 отображаются только значения 0-4.
- Он идемпотентен, потому что диагональ матрицы равна 0 1 2 3 4
- Это делится справа, потому что ни один столбец не содержит повторяющихся значений. (Строки могут и обычно будут.)
Свойство права-самораспределения сложнее проверить. Там может быть ярлык, но самый простой метод состоит в том, чтобы перебрать каждую возможную комбинацию из трех индексов, чтобы проверить это m[m[a][b]][c] = m[m[a][c]][m[b][c]]
.
вход
Входными данными будет список строк квадратной матрицы, использующий либо 0-индексирование, либо 1-индексирование (на ваш выбор). Каждая запись будет представлять собой однозначное число от 0
до 8
(или 1
через 9
). Я буду гибким в формате ввода. Некоторые приемлемые форматы включают в себя:
- Наиболее естественное форматирование вашего языка для матриц или списков, таких как
[[0 0 0][2 1 1][1 2 2]]
или(0,0,0,2,1,1,1,2,2)
. - Список значений, разделенных пробелами, символами новой строки, запятыми и т. Д.
- Одна строка, состоящая из всех значений, соединенных вместе, таких как
000211122
.
Вы также можете использовать транспонирование матрицы в качестве входных данных (замена строк на столбцы). Просто обязательно укажите это в своем ответе.
Выход
Единственное значение truey / falsey, указывающее статус матрицы как квандл.
Примеры квандл
0
0 0
1 1
0 0 0
2 1 1
1 2 2
0 0 1 1
1 1 0 0
3 3 2 2
2 2 3 3
0 3 4 1 2
2 1 0 4 3
3 4 2 0 1
4 2 1 3 0
1 0 3 2 4
Примеры не-квандл
не закрыто
1
0 0 0
2 1 1
1 9 2
не право-самораспределительный
0 0 1 0
1 1 0 1
2 3 2 2
3 2 3 3
(3◃1)◃2 = 2◃2 = 2
(3◃2)◃(1◃2) = 3◃0 = 3
делится не правильно
0 2 3 4 1
0 1 2 3 4
3 4 2 2 2
3 3 3 3 3
4 1 1 1 4
0 1 2 3
3 1 2 0
3 1 2 3
0 1 2 3
не идемпотент
1 1 1 1
3 3 3 3
2 2 2 2
0 0 0 0
2 1 0 4 3
3 4 2 0 1
4 2 1 3 0
1 0 3 2 4
0 3 4 1 2