Опис
Напишіть функцію, f(m, G)яка приймає в якості аргументів відображення mта набір / список відмінних, негативних чисел G.
mмає відображати пари цілих чисел у Gнових цілих чисел у G. ( G, m) гарантовано утворює кінцеву абелеву групу , але будь-який елемент Gможе бути ідентичним.
Існує важлива теорема, яка говорить:
fповинні повернути перелік основних повноважень [p1, ... pn]у порядку зростання, таким, що
Приклади
f((a, b) → (a+b) mod 4, [0, 1, 2, 3])повинен повернутися[4], як параметри описують групу Z 4 .f((a, b) → a xor b, [0, 1, 2, 3])повинен повернутися[2, 2], як параметри описують групу, ізоморфну Z 2 × Z 2 .f((a, b) → a, [9])повинен повернутися[], як параметри описують тривіальну групу; тобто добуток нульових циклічних груп.Визначте
mтак:(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Потім
f(m, [0, 1, ..., 80])слід повернутися[3, 3, 9], оскільки ця група є ізоморфною Z 3 × Z 3 × Z 9
Правила
mможе бути або функцією (або покажчиком функції на якусь функцію)Int × Int → Int, або словником, що відображає пари вG × Gнових елементахG.fможе приймати його параметри в зворотному порядку, тобто ви також можете реалізуватиf(G, m).Ваша реалізація теоретично повинна працювати для довільно великих входів, але насправді не повинна бути ефективною.
Немає обмежень щодо використання вбудованих будь-яких типів.
Діють стандартні правила гольф-коду . Виграє найкоротший код у байтах.
Таблиця лідерів
Щоб ваш рахунок з’явився на дошці, він повинен бути у такому форматі:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)).
AABC, трактуючи їх як трійки (A, B, C), з модулем додавання попарно (9, 3, 3).
mдозволено бути словником, чи можете ви надати тестові приклади також як словники?