Deskripsi
Tulis fungsi f(m, G)
yang menerima pemetaan sebagai argumen m
, dan satu set / daftar bilangan bulat yang tidak negatif G
.
m
harus memetakan pasangan bilangan bulat G
ke bilangan bulat baru di G
. ( G
, m
) dijamin untuk membentuk grup abelian yang terbatas , tetapi elemen apa pun G
mungkin identitasnya.
Ada teorema penting yang mengatakan:
f
harus mengembalikan daftar kekuatan utama [p1, ... pn]
dalam urutan naik sedemikian rupa sehingga
Contohnya
f((a, b) → (a+b) mod 4, [0, 1, 2, 3])
harus kembali[4]
, sebagai parameter menggambarkan kelompok Z 4 .f((a, b) → a xor b, [0, 1, 2, 3])
harus kembali[2, 2]
, karena parameter menggambarkan grup isomorfik hingga Z 2 × Z 2 .f((a, b) → a, [9])
harus kembali[]
, karena parameter menggambarkan kelompok sepele; yaitu, produk dari kelompok nol siklik.Tetapkan
m
sebagai berikut:(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
Maka
f(m, [0, 1, ..., 80])
harus kembali[3, 3, 9]
, karena grup ini isomorfik hingga Z 3 × Z 3 × Z 9
Aturan
m
dapat berupa fungsi (atau penunjuk fungsi ke beberapa fungsi)Int × Int → Int
, atau pemetaan kamus berpasanganG × G
dengan elemen baru dariG
.f
dapat mengambil parameternya dalam urutan yang berlawanan, yaitu Anda juga dapat menerapkanf(G, m)
.Implementasi Anda secara teoritis harus bekerja untuk input besar secara sewenang-wenang, tetapi sebenarnya tidak perlu menjadi efisien.
Tidak ada batasan untuk menggunakan built-in dalam bentuk apa pun.
Aturan standar kode-golf berlaku. Kode terpendek dalam byte menang.
Papan peringkat
Agar skor Anda muncul di papan tulis, itu harus dalam format ini:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)
).
AABC
, memperlakukan mereka sebagai tiga kali lipat (A, B, C)
, dengan tambahan modulo berpasangan (9, 3, 3)
.
m
diizinkan menjadi kamus, dapatkah Anda memberikan kasus uji sebagai kamus juga?