Escriba un programa que determine si una matriz dada representa un quandle. Un quandle es un conjunto equipado con una sola operación (no conmutativa, no asociativa) ◃ que obedece a los siguientes axiomas:
- La operación está cerrada, lo que significa que
a◃b = c
siempre es un elemento del conjunto sia
yb
son elementos del conjunto. - El funcionamiento es correcto-autodistributiva:
(a◃b)◃c = (a◃c)◃(b◃c)
. - La operación es divisible a la derecha: para cualquier par de
a
yb
, hay un único únicoc
tal quec◃a = b
- La operación es idempotente:
a◃a = a
Un quandle finito se puede representar como una matriz cuadrada. A continuación se muestra un ejemplo de un quandle de orden 5 ( fuente ).
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
El valor ubicado en la fila n-ésima y la columna m-ésima (indexada a 0) es el valor de n◃m. Por ejemplo, en este quandle, 4◃1 = 3
. Algunas de las propiedades de quandle son fáciles de ver desde esta matriz:
- Está cerrado porque solo los valores 0-4 aparecen en esta matriz de 5x5.
- Es idempotente porque la diagonal de la matriz es 0 1 2 3 4
- Es divisible a la derecha porque ninguna columna contiene valores duplicados. (Las filas pueden, y generalmente lo harán).
La propiedad de la auto-distributividad correcta es más difícil de probar. Puede haber un atajo, pero el método más simple es iterar sobre cada combinación posible de tres índices para verificar eso m[m[a][b]][c] = m[m[a][c]][m[b][c]]
.
Entrada
La entrada será la lista de filas de una matriz cuadrada, usando 0-indexing o 1-index (su elección). Cada entrada será un número de un solo dígito desde 0
hasta 8
(o 1
hasta 9
). Seré flexible en el formato de entrada. Algunos formatos aceptables incluyen:
- El formato más natural de su idioma para matrices o listas, como
[[0 0 0][2 1 1][1 2 2]]
o(0,0,0,2,1,1,1,2,2)
. - La lista de valores delimitados por espacios en blanco, líneas nuevas, comas, etc.
- Una sola cadena que consta de todos los valores concatenados juntos, como
000211122
.
También se le permite tomar la transposición de la matriz como entrada (intercambiando filas con columnas). Solo asegúrese de indicar esto en su respuesta.
Salida
Un solo valor de verdad / falsey que indica el estado de la matriz como quandle.
Ejemplos de quandles
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
Ejemplos de no quandles
no se ha cerrado
1
0 0 0
2 1 1
1 9 2
no correcto-auto-distributivo
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
no divisible a la derecha
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
no idempotente
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