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