编写一个程序,确定给定的矩阵是否表示一个量子点。甲quandle是配备有单个(非可交换的,非结合)操作◃其遵循以下公理一组:
- 该操作已关闭,这意味着
a◃b = c
如果a
和b
是的元素。 - 该操作是自行分配的:
(a◃b)◃c = (a◃c)◃(b◃c)
。 - 操作是右整除:对于任何选择的对
a
和b
,有单个唯一的c
,使得c◃a = b
- 该操作是幂等的:
a◃a = a
有限量子可以表示为方矩阵。以下是5阶夸德(source)的示例。
0 0 1 1 1
1 1 0 0 0
3 4 2 4 3
4 2 4 3 2
2 3 3 2 4
位于第n行第m列(索引为0)的值是n◃m的值。例如,在这个难题中,4◃1 = 3
。从这个矩阵很容易看出一些量子特性:
- 由于只有值0-4出现在此5x5矩阵中,因此它是封闭的。
- 这是幂等的,因为矩阵对角线是0 1 2 3 4
- 它是可右除的,因为没有列包含任何重复的值。(行可以并且通常会。)
自我分配权的性质更难检验。可能会有捷径,但最简单的方法是遍历三个索引的每种可能组合以验证m[m[a][b]][c] = m[m[a][c]][m[b][c]]
。
输入值
输入将是使用0索引或1索引(您的选择)的方矩阵的行列表。每个条目都是从0
到8
(或1
到9
)的单个数字。我会在输入格式上保持灵活性。一些可接受的格式包括:
- 矩阵或列表的语言最自然的格式,例如
[[0 0 0][2 1 1][1 2 2]]
或(0,0,0,2,1,1,1,2,2)
。 - 由空格,换行符,逗号等分隔的值列表。
- 由所有串联在一起的值组成的单个字符串,例如
000211122
。
您还可以将矩阵的转置作为输入(将行与列交换)。只要确保在您的答案中注明。
输出量
一个真/假值,指示矩阵的状态为分位数。
纠缠的例子
0
0 0
1 1
0 0 0
2 1 1
1 2 2
0 0 1 1
1 1 0 0
3 3 2 2
2 2 3 3
0 3 4 1 2
2 1 0 4 3
3 4 2 0 1
4 2 1 3 0
1 0 3 2 4
非夸大的例子
没有关闭
1
0 0 0
2 1 1
1 9 2
不正确的自我分配
0 0 1 0
1 1 0 1
2 3 2 2
3 2 3 3
(3◃1)◃2 = 2◃2 = 2
(3◃2)◃(1◃2) = 3◃0 = 3
不可右除
0 2 3 4 1
0 1 2 3 4
3 4 2 2 2
3 3 3 3 3
4 1 1 1 4
0 1 2 3
3 1 2 0
3 1 2 3
0 1 2 3
不是幂等的
1 1 1 1
3 3 3 3
2 2 2 2
0 0 0 0
2 1 0 4 3
3 4 2 0 1
4 2 1 3 0
1 0 3 2 4
0 3 4 1 2