Descrizione
Scrivi una funzione f(m, G)che accetta come argomenti una mappatura me un insieme / elenco di interi distinti, non negativi G.
mdovrebbe mappare coppie di numeri interi in Gnuovi numeri interi in G. ( G, m) è garantito per formare un gruppo abeliano finito , ma qualsiasi elemento di Gpuò essere l'identità.
C'è un teorema importante che dice:
fdeve restituire un elenco di poteri primi [p1, ... pn]in ordine crescente tale che
Esempi
f((a, b) → (a+b) mod 4, [0, 1, 2, 3])dovrebbe tornare[4], poiché i parametri descrivono il gruppo Z 4 .f((a, b) → a xor b, [0, 1, 2, 3])dovrebbe tornare[2, 2], poiché i parametri descrivono un gruppo isomorfo su Z 2 × Z 2 .f((a, b) → a, [9])dovrebbe tornare[], poiché i parametri descrivono il gruppo banale; cioè, il prodotto di zero gruppi ciclici.Definire
mcome segue:(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) * 9Quindi
f(m, [0, 1, ..., 80])dovrebbe tornare[3, 3, 9], poiché questo gruppo è isomorfo su Z 3 × Z 3 × Z 9
Regole
mpuò essere una funzione (o un puntatore a una funzione)Int × Int → Into un dizionario che si associaG × Ga nuovi elementi diG.fpuò prendere i suoi parametri nell'ordine opposto, cioè puoi anche implementaref(G, m).L'implementazione dovrebbe teoricamente funzionare per input arbitrariamente grandi, ma non deve essere effettivamente efficiente.
Non ci sono limiti all'uso di built-in di alcun tipo.
Si applicano le regole standard del code-golf . Vince il codice più breve in byte.
Classifica
Affinché il tuo punteggio appaia sul tabellone, dovrebbe essere in questo formato:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)).
AABC, trattandoli come triple (A, B, C), con modulo di aggiunta a coppie (9, 3, 3).
mè consentito essere un dizionario, potresti fornire anche i casi di test come dizionari?