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 = csiempre es un elemento del conjunto siaybson 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
ayb, hay un único únicoctal 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 0hasta 8(o 1hasta 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