这是所有2x2二进制矩阵
#0 #1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #14 #15
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
00 00 00 00 01 01 01 01 10 10 10 10 11 11 11 11
00 01 10 11 00 01 10 11 00 01 10 11 00 01 10 11
~
如果可以通过水平或垂直轴上任意数量的反射将一个映射到另一个矩阵,则在该关系下,两个二进制平方矩阵是等效的。
#1 ~ #2
在垂直轴上处于反射下,因此我们只需要保留其中之一(与哪一个无关)。同样#3 ~ #12
,#6 ~ #9
依此类推。
目的是产生一个程序,该程序接受单个输入N
并打印出尽可能多的N x N
二进制矩阵,从而在上述关系下输出中的所有矩阵都是不同的。
在手波伪代码中,可接受的解决方案是
define M[i] = N by N matrix with bit pattern equal to i
for i = 0 to (2^(N^2)) - 1
valid = true
for j = i+1 to (2^(N^2)) - 1
if (equivalent(M[i], M[j]))
valid = false
break
if (valid)
print (M[i])
对于输入,N=2
一个有效输出将是
00 00 00 01 10 01 11
00 01 11 01 01 11 11
但是通过从相同的等价类中选择不同的矩阵,另一个有效输出将是
00 10 11 11 11 10 01
00 00 00 10 11 10 10
矩阵的顺序无关紧要,从等效矩阵中进行的特定选择也无关紧要,而空格也无关紧要,只要您可以理解,就可以输出矩阵。
输出必须是详尽的。
最短的代码获胜。
编辑:这是我的第一个高尔夫球场,我改变了对获胜标准的看法。
并非专为简洁/高尔夫而设计的语言中最短的代码。
我希望事后更改此标准不是不好的礼节,但我认为以“正常”语言进行更改是一个更有趣的主张。