Beschreibung
Schreiben Sie eine Funktion f(m, G)
, die als Argumente eine Zuordnung m
und eine Menge / Liste unterschiedlicher, nicht negativer Ganzzahlen akzeptiert G
.
m
sollte Paare von ganzen Zahlen G
auf neue ganze Zahlen in abbilden G
. ( G
, m
) bildet garantiert eine endliche abelsche Gruppe , aber jedes Element von G
kann die Identität sein.
Es gibt einen wichtigen Satz, der besagt:
f
muss eine Liste der Hauptmächte [p1, ... pn]
in aufsteigender Reihenfolge zurückgeben, so dass
Beispiele
f((a, b) → (a+b) mod 4, [0, 1, 2, 3])
sollte zurückkehren[4]
, da die Parameter die Gruppe Z 4 beschreiben .f((a, b) → a xor b, [0, 1, 2, 3])
sollte zurückkehren[2, 2]
, da die Parameter eine Gruppe beschreiben, die zu Z 2 × Z 2 isomorph ist .f((a, b) → a, [9])
sollte zurückkehren[]
, da die Parameter die triviale Gruppe beschreiben; dh das Produkt von null cyclischen Gruppen.Definieren Sie
m
wie folgt:(a, b) → (a mod 3 + b mod 3) mod 3 + ((floor(a / 3) + floor(b / 3)) mod 3) * 3 + ((floor(a / 9) + floor(b / 9)) mod 9) * 9
Dann
f(m, [0, 1, ..., 80])
sollte zurückkehren[3, 3, 9]
, da diese Gruppe isomorph zu Z 3 × Z 3 × Z 9 ist
Regeln
m
kann entweder eine Funktion (oder ein Funktionszeiger auf eine Funktion)Int × Int → Int
oder ein Wörterbuch sein, das PaareG × G
auf neue Elemente von abbildetG
.f
kann seine Parameter in umgekehrter Reihenfolge annehmen, dh Sie können auch implementierenf(G, m)
.Ihre Implementierung sollte theoretisch für beliebig große Eingaben funktionieren, muss jedoch nicht effizient sein.
Es gibt keine Einschränkung für die Verwendung von integrierten Funktionen jeglicher Art.
Es gelten die Standardregeln für Code-Golf . Der kürzeste Code in Bytes gewinnt.
Bestenliste
Damit Ihre Partitur an der Tafel erscheint, sollte sie das folgende Format haben:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)
).
AABC
und behandelt sie als Dreifache (A, B, C)
mit paarweiser Addition modulo (9, 3, 3)
.
m
es sich um ein Wörterbuch handelt, können Sie die Testfälle auch als Wörterbücher bereitstellen?