Descripción
Escriba una función f(m, G)que acepte como argumentos un mapeo my un conjunto / lista de enteros distintos y no negativos G.
mdebería asignar pares de enteros Ga nuevos enteros en G. ( G, m) está garantizado para formar un grupo abeliano finito , pero cualquier elemento Gpuede ser la identidad.
Hay un teorema importante que dice:
fdebe 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
msiguiente 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) * 9Entonces
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
mpuede ser una función (o un puntero de función a alguna función)Int × Int → Int, o un mapeo de diccionario se emparejaG × Gcon nuevos elementos deG.fpuede 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).
mse permite que sea un diccionario, ¿podría proporcionar los casos de prueba como diccionarios también?