Molti argomenti importanti dell'algebra astratta riguardano una funzione binaria che agisce su un set. Nell'indagine su tali argomenti sono state definite alcune proprietà di tali funzioni.
La tua sfida consisterà nel determinare se una determinata funzione binaria su un determinato dominio possiede cinque di queste proprietà.
Proprietà
Una funzione binaria viene chiusa se ogni possibile output è nel dominio.
Una funzione binaria è associativa se l'ordine in cui la funzione viene applicata a una serie di input non influisce sul risultato. Cioè, $
è associativo se è (a $ b) $ c
sempre uguale a $ (b $ c)
. Si noti che poiché il valore (a $ b)
viene utilizzato come input, le funzioni associative devono essere chiuse.
Una funzione binaria è commutativa se lo scambio dell'ordine degli input non modifica il risultato. In altre parole, se è a $ b
sempre uguale b $ a
.
Una funzione binaria ha un elemento identità se esiste qualche elemento e
nel dominio tale che a $ e = a = e $ a
per tutti a
nel dominio.
Una funzione binaria è idempotente se applicandola a due input identici si ottiene quel numero come output. In altre parole, se a $ a = a
per tutti a
nel dominio.
Ingresso
Ti verrà data una funzione sotto forma di matrice, e il dominio della funzione saranno i numeri 0 ... n-1
, dove si n
trova la lunghezza laterale della matrice.
Il valore (a $ b)
è codificato nella matrice come elemento th a
della riga b
. Se la matrice di input è Q
, allora a $ b
=Q[a][b]
Ad esempio, la funzione di esponenziazione ( **
in Python) sul dominio [0, 1, 2]
è codificata come:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
I domini sinistro e destro sono gli stessi, quindi la matrice sarà sempre quadrata.
È possibile utilizzare qualsiasi formato matrice conveniente come input, come un elenco di elenchi, un singolo elenco in ordine di riga o colonna, l'oggetto matrice nativo della propria lingua, ecc. Tuttavia, non è possibile utilizzare direttamente una funzione come input.
Per semplicità, le voci della matrice saranno tutte numeri interi. Puoi presumere che si adattino al tipo intero nativo della tua lingua.
Produzione
È possibile indicare quale delle proprietà di cui sopra è valida in qualsiasi formato scelto, incluso un elenco di valori booleani, una stringa con un carattere diverso per ogni proprietà, ecc. Tuttavia, deve esserci un output distinto e unico per ciascuno dei 24 possibili sottoinsiemi delle proprietà. Questo output deve essere facilmente leggibile dall'uomo.
Esempi
La funzione massima sul dominio n = 4:
[[0, 1, 2, 3]
[1, 1, 2, 3]
[2, 2, 2, 3]
[3, 3, 3, 3]]
Questa funzione ha le proprietà di chiusura, associatività, commutatività, identità e idempotenza.
La funzione di esponenziazione sul dominio n = 3:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Questa funzione non ha nessuna delle proprietà sopra.
La funzione di aggiunta sul dominio n = 3:
[[0, 1, 2]
[1, 2, 3]
[2, 3, 4]]
Questa funzione ha le proprietà della commutatività e dell'identità.
Il combinatore K sul dominio n = 3:
[[0, 0, 0]
[1, 1, 1]
[2, 2, 2]]
Questa funzione ha le proprietà di chiusura, associatività e idempotenza.
La funzione di differenza assoluta sul dominio n = 3:
[[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
Questa funzione ha le proprietà di chiusura, commutatività e identità.
La funzione media, arrotondando a pari, sul dominio n = 3:
[[0, 0, 1]
[0, 1, 2]
[1, 2, 2]]
Questa funzione ha le proprietà di chiusura, commutatività, identità e idempotenza.
La funzione di uguaglianza sul dominio n = 3:
[[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]
Questa funzione ha le proprietà di chiusura e commutatività.
Sfida
Questo è il codice golf. Si applicano scappatoie standard . Vince il minimo byte.
c=all(l>)
?