De nombreux sujets importants en algèbre abstraite impliquent une fonction binaire agissant sur un ensemble. Un certain nombre de propriétés de ces fonctions ont été définies dans l'étude de ces sujets.
Votre défi sera de déterminer si une fonction binaire donnée sur un domaine donné possède cinq de ces propriétés.
Propriétés
Une fonction binaire est fermée si toutes les sorties possibles se trouvent dans le domaine.
Une fonction binaire est associative si l'ordre dans lequel la fonction est appliquée à une série d'entrées n'affecte pas le résultat. C'est-à-dire qu'il $
est associatif s'il est (a $ b) $ c
toujours égal a $ (b $ c)
. Notez que la valeur (a $ b)
étant utilisée en entrée, les fonctions associatives doivent être fermées.
Une fonction binaire est commutative si l'échange de l'ordre des entrées ne change pas le résultat. En d'autres termes, si a $ b
toujours égal b $ a
.
Une fonction binaire a un élément d'identité s'il existe un élément e
dans le domaine tel que a $ e = a = e $ a
pour tous a
dans le domaine.
Une fonction binaire est idempotente si l'appliquer à deux entrées identiques donne ce nombre comme sortie. En d'autres termes, si a $ a = a
pour tous a
dans le domaine.
Contribution
Vous recevrez une fonction sous la forme d'une matrice, et le domaine de la fonction sera les nombres 0 ... n-1
, où n
est la longueur latérale de la matrice.
La valeur (a $ b)
est codée dans la matrice en tant que e élément de la a
troisième ligne b
. Si la matrice d'entrée est Q
, alors a $ b
=Q[a][b]
Par exemple, la fonction d'exponentiation ( **
en Python) sur le domaine [0, 1, 2]
est codée comme suit:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Les domaines gauche et droit sont identiques, donc la matrice sera toujours carrée.
Vous pouvez utiliser n'importe quel format de matrice pratique en entrée, comme une liste de listes, une seule liste dans l'ordre principal des lignes ou des colonnes, l'objet matriciel natif de votre langue, etc. Cependant, vous ne pouvez pas prendre directement une fonction en entrée.
Par souci de simplicité, les entrées de la matrice seront toutes des entiers. Vous pouvez supposer qu'ils correspondent au type d'entier natif de votre langue.
Production
Vous pouvez indiquer laquelle des propriétés ci-dessus contient dans n'importe quel format que vous choisissez, y compris une liste de booléens, une chaîne avec un caractère différent pour chaque propriété, etc. Cependant, il doit y avoir une sortie distincte et unique pour chacun des 24 sous-ensembles possibles des propriétés. Cette sortie doit être facilement lisible par l'homme.
Exemples
La fonction maximale sur le domaine n = 4:
[[0, 1, 2, 3]
[1, 1, 2, 3]
[2, 2, 2, 3]
[3, 3, 3, 3]]
Cette fonction a les propriétés de fermeture, d'associativité, de commutativité, d'identité et d'idempotence.
La fonction d'exponentiation sur le domaine n = 3:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Cette fonction n'a aucune des propriétés ci-dessus.
La fonction d'addition sur le domaine n = 3:
[[0, 1, 2]
[1, 2, 3]
[2, 3, 4]]
Cette fonction a les propriétés de commutativité et d'identité.
Le combinateur K sur le domaine n = 3:
[[0, 0, 0]
[1, 1, 1]
[2, 2, 2]]
Cette fonction a les propriétés de fermeture, d'associativité et d'idempotence.
La fonction de différence absolue sur le domaine n = 3:
[[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
Cette fonction a les propriétés de fermeture, de commutativité et d'identité.
La fonction moyenne, arrondie vers pair, sur le domaine n = 3:
[[0, 0, 1]
[0, 1, 2]
[1, 2, 2]]
Cette fonction a les propriétés de fermeture, commutativité, identité et idempotence.
La fonction d'égalité sur le domaine n = 3:
[[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]
Cette fonction a les propriétés de fermeture et de commutativité.
Défi
C'est le golf de code. Des échappatoires standard s'appliquent. Le moins d'octets l'emporte.
c=all(l>)
?