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 seaebsono 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
aeb, esiste un unico unicoctalec◃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 0a 8(o 1attraverso 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