Scrivi un programma che determinerà se una data matrice rappresenta un dilemma. Un dilemma è un set dotato di una singola operazione (non commutativa, non associativa) ◃ che obbedisce ai seguenti assiomi:
- L'operazione è chiusa, il che significa che
a◃b = c
è sempre un elemento dell'insieme sea
eb
sono elementi dell'insieme. - L'operazione è di destra-self-distributiva:
(a◃b)◃c = (a◃c)◃(b◃c)
. - L'operazione è divisibile a destra: per ogni coppia scelta di
a
eb
, esiste un unico unicoc
talec◃a = b
- L'operazione è idempotente:
a◃a = a
Un dilemma finito può essere rappresentato come una matrice quadrata. Di seguito è riportato un esempio di un quandle ordine-5 ( sorgente ).
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
Il valore situato nella riga n-esima e nella colonna m-esima (indicizzato 0) è il valore di n◃m. Ad esempio, in questo quandle, 4◃1 = 3
. Alcune delle proprietà dei quandle sono facili da vedere da questa matrice:
- È chiuso perché in questa matrice 5x5 compaiono solo i valori 0-4.
- È idempotente perché la diagonale della matrice è 0 1 2 3 4
- È divisibile a destra perché nessuna colonna contiene valori duplicati. (Le righe possono, e di solito lo faranno.)
La proprietà dell'autodisciplina è più difficile da testare. Potrebbe esserci un collegamento, ma il metodo più semplice è quello di scorrere su ogni possibile combinazione di tre indici per verificarlo m[m[a][b]][c] = m[m[a][c]][m[b][c]]
.
Ingresso
L'input sarà l'elenco di righe di una matrice quadrata, usando 0-indexing o 1-index (a tua scelta). Ogni voce sarà un numero a una cifra da 0
a 8
(o 1
attraverso 9
). Sarò flessibile sul formato di input. Alcuni formati accettabili includono:
- La formattazione più naturale della tua lingua per matrici o elenchi, come
[[0 0 0][2 1 1][1 2 2]]
o(0,0,0,2,1,1,1,2,2)
. - L'elenco di valori delimitati da spazi bianchi, newline, virgole, ecc.
- Una singola stringa composta da tutti i valori concatenati insieme, ad esempio
000211122
.
Puoi anche prendere la trasposizione della matrice come input (scambiando righe con colonne). Assicurati di dichiararlo nella tua risposta.
Produzione
Un singolo valore di verità / falsità che indica lo stato della matrice come dilemma.
Esempi di dilemmi
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
Esempi di non-quandles
non chiuso
1
0 0 0
2 1 1
1 9 2
non giusto 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
non divisibile a destra
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
non 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