Описание
Напишите функцию, 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)
.Ваша реализация должна теоретически работать для произвольно больших входных данных, но не обязательно должна быть эффективной.
Нет никаких ограничений на использование встроенных программ любого рода.
Применяются стандартные правила игры в гольф . Самый короткий код в байтах побеждает.
Leaderboard
Чтобы ваш счет появился на доске, он должен быть в следующем формате:
# Language, Bytes
for a in G: for b in G: d[(a, b)] = m(a, b)
).
AABC
, обрабатывая их как тройки (A, B, C)
, с попарно сложением по модулю (9, 3, 3)
.
m
разрешено быть словарем, могли бы вы также предоставить контрольные примеры в качестве словарей?