Bei vielen wichtigen Themen der abstrakten Algebra handelt es sich um eine Binärfunktion, die auf eine Menge einwirkt. Bei der Untersuchung solcher Themen wurde eine Reihe von Eigenschaften solcher Funktionen definiert.
Ihre Herausforderung wird darin bestehen, festzustellen, ob eine gegebene Binärfunktion in einer gegebenen Domäne fünf dieser Eigenschaften besitzt.
Eigenschaften
Eine Binärfunktion wird geschlossen, wenn sich jeder mögliche Ausgang in der Domäne befindet.
Eine Binärfunktion ist assoziativ, wenn die Reihenfolge, in der die Funktion auf eine Reihe von Eingaben angewendet wird, das Ergebnis nicht beeinflusst. Das heißt, $
ist assoziativ, wenn (a $ b) $ c
immer gleich a $ (b $ c)
. Beachten Sie, dass (a $ b)
assoziative Funktionen geschlossen werden müssen , da der Wert als Eingabe verwendet wird.
Eine Binärfunktion ist kommutativ, wenn das Vertauschen der Reihenfolge der Eingänge das Ergebnis nicht ändert. Mit anderen Worten, wenn a $ b
immer gleich b $ a
.
Eine Binärfunktion hat ein Identitätselement, wenn e
in der Domäne ein Element vorhanden ist , das a $ e = a = e $ a
für alle a
in der Domäne gilt.
Eine Binärfunktion ist idempotent, wenn sie auf zwei identische Eingänge angewendet wird und diese Nummer als Ausgang ergibt. Mit anderen Worten, wenn a $ a = a
für allea
in der Domäne.
Eingang
Sie erhalten eine Funktion in Form einer Matrix, und die Domäne der Funktion sind die Zahlen 0 ... n-1
, in denenn
die Seitenlänge der Matrix ist.
Der Wert (a $ b)
wird in der Matrix als das a
th- b
Element der th-Zeile codiert . Wenn die Eingabematrix ist Q
, danna $ b
=Q[a][b]
Beispielsweise ist die Exponentiationsfunktion ( **
in Python) für die Domäne wie [0, 1, 2]
folgt codiert:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Die linke und die rechte Domäne sind identisch, sodass die Matrix immer quadratisch ist.
Sie können ein beliebiges praktisches Matrixformat als Eingabe verwenden, z. B. eine Liste mit Listen, eine einzelne Liste in Zeilen- oder Spaltenreihenfolge, das native Matrixobjekt Ihrer Sprache usw. Sie können jedoch möglicherweise keine Funktion direkt als Eingabe verwenden.
Der Einfachheit halber sind alle Matrixeinträge Ganzzahlen. Sie können davon ausgehen, dass sie in den systemeigenen Integer-Typ Ihrer Sprache passen.
Ausgabe
Sie können angeben, welche der oben genannten Eigenschaften in einem von Ihnen gewählten Format gültig ist, einschließlich einer Liste von Booleschen Werten, einer Zeichenfolge mit einem anderen Zeichen für jede Eigenschaft usw. Für jede der 24 möglichen Teilmengen muss jedoch eine eigene, eindeutige Ausgabe vorliegen der Eigenschaften. Diese Ausgabe muss leicht lesbar sein.
Beispiele
Die maximale Funktion in der Domäne n = 4:
[[0, 1, 2, 3]
[1, 1, 2, 3]
[2, 2, 2, 3]
[3, 3, 3, 3]]
Diese Funktion hat die Eigenschaften Schließung, Assoziativität, Kommutativität, Identität und Idempotenz.
Die Potenzierungsfunktion für die Domäne n = 3:
[[1, 0, 0]
[1, 1, 1]
[1, 2, 4]]
Diese Funktion hat keine der oben genannten Eigenschaften.
Die Additionsfunktion auf Domain n = 3:
[[0, 1, 2]
[1, 2, 3]
[2, 3, 4]]
Diese Funktion hat die Eigenschaften Kommutativität und Identität.
Der K-Kombinator in Domäne n = 3:
[[0, 0, 0]
[1, 1, 1]
[2, 2, 2]]
Diese Funktion hat die Eigenschaften Schließung, Assoziativität und Idempotenz.
Die absolute Differenzfunktion in der Domäne n = 3:
[[0, 1, 2]
[1, 0, 1]
[2, 1, 0]]
Diese Funktion hat die Eigenschaften Schließung, Kommutativität und Identität.
Die auf gerade gerundete Durchschnittsfunktion für die Domäne n = 3:
[[0, 0, 1]
[0, 1, 2]
[1, 2, 2]]
Diese Funktion hat die Eigenschaften Schließung, Kommutativität, Identität und Idempotenz.
Die Gleichheitsfunktion auf Domain n = 3:
[[1, 0, 0]
[0, 1, 0]
[0, 0, 1]]
Diese Funktion hat die Eigenschaften Schließung und Kommutativität.
Herausforderung
Das ist Code Golf. Es gelten Standardlücken . Wenigste Bytes gewinnt.
c=all(l>)
?