Opis
Napisz funkcję, f(m, G)
która przyjmuje jako argumenty odwzorowanie m
i zestaw / listę odrębnych, nieujemnych liczb całkowitych G
.
m
powinien mapować pary liczb całkowitych G
na nowe liczby całkowite w G
. ( G
, m
) gwarantuje utworzenie skończonej grupy abelowej , ale dowolnym elementem G
może być tożsamość.
Istnieje ważne twierdzenie, które mówi:
f
musi zwrócić listę głównych mocy [p1, ... pn]
w porządku rosnącym, tak aby
Przykłady
f((a, b) → (a+b) mod 4, [0, 1, 2, 3])
powinien powrócić[4]
, ponieważ parametry opisują grupę Z 4 .f((a, b) → a xor b, [0, 1, 2, 3])
powinien powrócić[2, 2]
, ponieważ parametry opisują grupę izomorficzną do Z 2 × Z 2 .f((a, b) → a, [9])
powinien powrócić[]
, ponieważ parametry opisują trywialną grupę; tj. iloczyn zerowych grup cyklicznych.Zdefiniuj
m
w następujący sposób:(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
Następnie
f(m, [0, 1, ..., 80])
powinien wrócić[3, 3, 9]
, ponieważ ta grupa jest izomorficzna do Z 3 × Z 3 × Z 9
Zasady
m
może być funkcją (lub wskaźnikiem funkcji do jakiejś funkcji)Int × Int → Int
lub parowaniem słownikaG × G
na nowe elementyG
.f
może przyjmować swoje parametry w odwrotnej kolejności, tzn. możesz także zaimplementowaćf(G, m)
.Twoje wdrożenie powinno teoretycznie działać dla dowolnie dużych nakładów, ale tak naprawdę nie musi być wydajne.
Nie ma żadnych ograniczeń dotyczących korzystania z jakichkolwiek wbudowanych funkcji.
Obowiązują standardowe zasady gry w golfa . Najkrótszy kod w bajtach wygrywa.
Tabela liderów
Twój wynik powinien pojawić się na tablicy, powinien mieć następujący format:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)
).
AABC
, traktując je jako potrójne (A, B, C)
, z modulo dodawania parami (9, 3, 3)
.
m
wolno ci być słownikiem, czy możesz podać przypadki testowe jako słowniki?