Descripción
Escriba una función f(m, G)
que acepte como argumentos un mapeo m
y un conjunto / lista de enteros distintos y no negativos G
.
m
debería asignar pares de enteros G
a nuevos enteros en G
. ( G
, m
) está garantizado para formar un grupo abeliano finito , pero cualquier elemento G
puede ser la identidad.
Hay un teorema importante que dice:
f
debe devolver una lista de potencias principales [p1, ... pn]
en orden ascendente de modo que
Ejemplos
f((a, b) → (a+b) mod 4, [0, 1, 2, 3])
debería regresar[4]
, ya que los parámetros describen el grupo Z 4 .f((a, b) → a xor b, [0, 1, 2, 3])
debería regresar[2, 2]
, ya que los parámetros describen un grupo isomorfo a Z 2 × Z 2 .f((a, b) → a, [9])
debería regresar[]
, ya que los parámetros describen el grupo trivial; es decir, el producto de cero grupos cíclicos.Definir de la
m
siguiente manera:(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
Entonces
f(m, [0, 1, ..., 80])
debería regresar[3, 3, 9]
, ya que este grupo es isomorfo a Z 3 × Z 3 × Z 9
Reglas
m
puede ser una función (o un puntero de función a alguna función)Int × Int → Int
, o un mapeo de diccionario se emparejaG × G
con nuevos elementos deG
.f
puede tomar sus parámetros en el orden opuesto, es decir, también puede implementarlosf(G, m)
.Su aplicación debería teóricamente funciona para arbitrariamente grandes entradas, pero en realidad no necesita ser eficiente.
No hay limitación en el uso de incorporados de ningún tipo.
Se aplican reglas estándar de código de golf . El código más corto en bytes gana.
Tabla de clasificación
Para que su puntaje aparezca en el tablero, debe estar en este formato:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)
).
AABC
, tratándolos como triples (A, B, C)
, con un módulo de suma por pares (9, 3, 3)
.
m
se permite que sea un diccionario, ¿podría proporcionar los casos de prueba como diccionarios también?