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>)
?[i%i|i<-b]==b
.CJam, 95 Bytes
Gibt eine Folge von aus
*AC1I
.*
ist das Symbol für die Schließung ,A
ist für assoziativ ,C
ist für kommutativ ,1
ist für Identität undI
ist für idempotent .Das Eingabearray wird gelesen
q~
und in A (:A
) gespeichert .Schließung
Wenn alle (
:*
) Elemente in der Matrix (Ae_
) kleinerf<
als B = Größe (A) (A,:B
) sind, drucken Sie a*
('**
).Assoziativität
Generiere alle Tripel in der Domain (
B3m*
). Wir drucken,A
wenn alle eine Bedingung erfüllen ({...}%:*'A*
).Die Bedingung ist, dass für ein Dreifaches
[i j k]
, das diese Liste mit A (_{A==}*
) nach links faltet und das Gegenteil[k j i]
(\W%
) mit A op ({Az==}*
) nach links faltet , die gespiegelte Version vonA
, gleich (=
) ist.Kommutativität
A muss seine transponieren gleich:
A_z=
. Wenn ja, drucken wirC
('C=
).Identität
Die Identität muss eindeutig sein, daher können wir nur eine drucken
1
.Idempotent
Überprüfen Sie, ob die Diagonale gleich ist
B,
. Wenn ja, drucken Sie einI
.quelle
Matlab, 226
Es ist wichtig zu bemerken, dass nicht geschlossen nicht assoziativ bedeutet. Viele dieser Eigenschaften können einfach anhand einiger Eigenschaften der Matrix überprüft werden:
Eingabe über Standard-Matlab-Notation:
[a,b;c,d]
oder[[a,b];[c,d]]
oder[a b;c d]
etcDie Ausgabe ist ein Vektor aus Einsen und Nullen, 1 = wahr, 0 = falsch für jede der Eigenschaften in der angegebenen Reihenfolge.
Vollständiger Code:
quelle
JavaScript (ES6) 165
Eine anonyme Funktion, die ein Array mit fünf 0/1-Werten zurückgibt, und zwar in der Reihenfolge Closure, Associativity, Commutativity, Identity und Idempotence.
Weniger golfen
Prüfung
quelle