La description
Écrivez une fonction f(m, G)
qui accepte comme arguments un mappage m
et un ensemble / liste d'entiers distincts et non négatifs G
.
m
doit mapper des paires d'entiers dans G
de nouveaux entiers dans G
. ( G
, m
) est garanti pour former un groupe abélien fini , mais tout élément de G
peut être l'identité.
Il existe un théorème important qui dit:
f
doit renvoyer une liste des principaux pouvoirs [p1, ... pn]
dans l'ordre croissant de telle sorte que
Exemples
f((a, b) → (a+b) mod 4, [0, 1, 2, 3])
devrait revenir[4]
, car les paramètres décrivent le groupe Z 4 .f((a, b) → a xor b, [0, 1, 2, 3])
devrait revenir[2, 2]
, car les paramètres décrivent un groupe isomorphe à Z 2 × Z 2 .f((a, b) → a, [9])
devrait revenir[]
, car les paramètres décrivent le groupe trivial; c'est-à-dire le produit de groupes cycliques nuls.Définissez
m
comme suit:(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
Puis
f(m, [0, 1, ..., 80])
devrait revenir[3, 3, 9]
, car ce groupe est isomorphe à Z 3 × Z 3 × Z 9
Règles
m
peut être soit une fonction (ou un pointeur de fonction vers une fonction)Int × Int → Int
, soit un dictionnaire mappant des pairesG × G
vers de nouveaux éléments deG
.f
peut prendre ses paramètres dans l'ordre inverse, c'est-à-dire que vous pouvez également l'implémenterf(G, m)
.Votre implémentation devrait théoriquement fonctionner pour des entrées arbitrairement grandes, mais n'a pas besoin d'être réellement efficace.
Il n'y a aucune limitation à l'utilisation de modules intégrés de quelque nature que ce soit.
Les règles de code-golf standard s'appliquent. Le code le plus court en octets gagne.
Classement
Pour que votre score apparaisse sur le tableau, il doit être dans ce format:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)
).
AABC
, les traitant comme des triplets (A, B, C)
, avec un module d'addition par paire (9, 3, 3)
.
m
est autorisé à être un dictionnaire, pourriez-vous également fournir les cas de test sous forme de dictionnaires?