给定一个二进制3D数组,对于每一层,按其上一层的各列的二进制编码所示,将其每一列循环向上旋转许多步,然后按如下所示将其每一行循环左旋转许多步下方图层的行的二进制编码。
总会有至少三层。顶层的列和底层的行不应旋转。
演练
让我们从小的4层2行3列数组开始:
[[[1,0,1],
[1,0,0]],
[[1,0,1],
[0,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,0],
[1,1,1]]]
第一步是评估每一层的列和行以二进制编码的数字:
3 0 2
5 [[[1,0,1],
4 [1,0,0]],
2 1 3
5 [[1,0,1],
3 [0,1,1]],
1 3 3
3 [[0,1,1],
7 [1,1,1]],
3 3 1
6 [[1,1,0],
7 [1,1,1]]]
第一层[[1,0,1],[1,0,0]]
不会旋转其列,但其行将分别向左循环5步和3步,从而变为[[1,1,0],[1,0,0]]
。
第二层[[1,0,1],[0,1,1]]
的列将分别循环向上旋转3、0和2步,给出[[0,0,1],[1,1,1]]
,然后将行分别向左循环旋转3和7步,没有可见变化。向上旋转2、1、3步
的第三层[[0,1,1],[1,1,1]]
保持不变,向左旋转6、7步也没有任何作用。
最后,[[1,1,0],[1,1,1]]
向上旋转了1、3和3步的第四层是[[1,1,1],[1,1,0]]
,但是之后的行不再旋转,因为它是最后一层。
再次将所有图层放在一起,便得到了二进制自旋转3D数组:
[[[1,1,0],
[1,0,0]],
[[0,0,1],
[1,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,1],
[1,1,0]]]
示例案例:
[[[1,0,1],[1,0,0]],[[1,0,1],[0,1,1]],[[0,1,1],[1,1,1]],[[1,1,0],[1,1,1]]]
给
[[[1,1,0],[1,0,0]],[[0,0,1],[1,1,1]],[[0,1,1],[1,1,1]],[[1,1,1],[1,1,0]]]
[[[1]],[[1]],[[0]]]
给
[[[1]],[[1]],[[0]]]
[[[1,0,1],[1,0,1],[1,0,1]],[[0,0,1],[0,0,1],[0,0,1]],[[1,0,0],[1,0,1],[0,0,1]]]
给
[[[0,1,1],[0,1,1],[0,1,1]],[[0,1,0],[1,0,0],[0,1,0]],[[1,0,1],[1,0,1],[0,0,0]]]
None
在旋转切片时会处理,所以我相信这两个罐子都['0']
可以变成[[]]
。