Açıklama
f(m, G)
Bağımsız değişken olarak bir eşleme m
ve farklı, negatif olmayan tamsayıların bir kümesini / listesini kabul eden bir işlev yazın G
.
m
içindeki tamsayı çiftlerini G
yeni tamsayılarla eşleştirmelidir G
. ( G
, m
) 'nin sonlu bir abelya grubu oluşturması garanti edilir , ancak herhangi bir unsuru G
kimlik olabilir.
Önemli bir teorem var:
[Her sonlu abelya grubu], döngüsel prime güç düzeni gruplarının doğrudan çarpımı için izomorfiktir.
f
asal güçlerin listesini [p1, ... pn]
artan sırada döndürmelidir .
Örnekler
f((a, b) → (a+b) mod 4, [0, 1, 2, 3])
dönmelidir[4]
parametreler grup açıklamak gibi Z 4 .f((a, b) → a xor b, [0, 1, 2, 3])
dönmelidir[2, 2]
parametreleri izomorf bir grubu tarif olarak, Z 2 x Z 2 .f((a, b) → a, [9])
[]
parametreler önemsiz grubu tanımladığı için geri dönmelidir ; yani sıfır siklik grupların ürünü.Aşağıdaki
m
gibi tanımlayın :(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
Daha sonra
f(m, [0, 1, ..., 80])
geri[3, 3, 9]
dönmelisiniz, çünkü bu grup Z 3 × Z 3 × Z 9'a izomorfiktir
kurallar
m
bir işlev (veya bazı işlevlere ilişkin işlev işaretçisi)Int × Int → Int
veya sözlüğününG × G
yeni öğelerine eşlenen bir sözlük eşlemesi olabilirG
.f
parametrelerini ters sırayla alabilir, yani uygulayabilirsinizf(G, m)
.Uygulamanız teorik olarak keyfi olarak büyük girdiler için çalışmalıdır, ancak aslında verimli olması gerekmez.
Herhangi bir tür yerleşik kullanım konusunda herhangi bir sınırlama yoktur.
Standart kod golf kuralları geçerlidir. Bayt cinsinden en kısa kod kazanır.
Liderler Sıralaması
Puanınızın tahtada görünmesi için şu biçimde olması gerekir:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)
) oluşturmaları muhtemelen daha kolaydır .
AABC
bunları üçlü olarak muamele eder (A, B, C)
, çift ekleme modülü ile (9, 3, 3)
.
m
bir sözlük olmasına izin, siz de sözlüklerde olarak test durumları sağlayabilir?