Écrivez un programme qui déterminera si une matrice donnée représente un dilemme. Un quandle est un ensemble équipé d'une seule opération (non commutative, non associative) ◃ qui obéit aux axiomes suivants:
- L'opération est fermée, ce qui signifie que
a◃b = c
c'est toujours un élément de l'ensemble sia
etb
sont des éléments de l'ensemble. - L'opération est droit auto-distributive:
(a◃b)◃c = (a◃c)◃(b◃c)
. - L'opération est divisible à droite: pour toute paire choisie de
a
etb
, il existe un unique uniquec
tel quec◃a = b
- L'opération est idempotente:
a◃a = a
Un quandle fini peut être représenté comme une matrice carrée. Ci-dessous, un exemple de quandle d'ordre 5 ( source ).
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
La valeur située à la nième ligne et à la mième colonne (indexée 0) est la valeur de n◃m. Par exemple, dans ce quandle, 4◃1 = 3
. Certaines des propriétés quandle sont faciles à voir dans cette matrice:
- Il est fermé car seules les valeurs 0-4 apparaissent dans cette matrice 5x5.
- Elle est idempotente car la diagonale de la matrice est 0 1 2 3 4
- Il est divisible à droite car aucune colonne ne contient de valeurs en double. (Les rangées le peuvent et le seront généralement.)
La propriété de l'auto-distributivité droite est plus difficile à tester. Il peut y avoir un raccourci, mais la méthode la plus simple consiste à parcourir chaque combinaison possible de trois index pour le vérifier m[m[a][b]][c] = m[m[a][c]][m[b][c]]
.
Contribution
L'entrée sera la liste des lignes d'une matrice carrée, en utilisant soit l'indexation 0 soit l'index 1 (votre choix). Chaque entrée sera un numéro à un chiffre de 0
à 8
(ou à 1
travers 9
). Je serai flexible sur le format d'entrée. Certains formats acceptables comprennent:
- Formatage le plus naturel de votre langue pour les matrices ou les listes, comme
[[0 0 0][2 1 1][1 2 2]]
ou(0,0,0,2,1,1,1,2,2)
. - La liste des valeurs délimitées par des espaces, des sauts de ligne, des virgules, etc.
- Une chaîne unique composée de toutes les valeurs concaténées, telles que
000211122
.
Vous êtes également autorisé à prendre la transposition de la matrice en entrée (échange de lignes avec des colonnes). Assurez-vous simplement de l'indiquer dans votre réponse.
Production
Une seule valeur vérité / falsey indiquant l'état de la matrice comme un dilemme.
Exemples de dilemmes
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
Exemples de non-quandles
pas fermé
1
0 0 0
2 1 1
1 9 2
pas d'auto-distribution à droite
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
non divisible à droite
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
pas idempotent
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