描述
编写一个函数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允许作为字典,您还可以将测试用例作为字典提供吗?