バイナリ3D配列が与えられた場合、各レイヤーについて、その上のレイヤーの列のバイナリエンコーディングで示されるステップ数だけ各列を循環的に上に回転させ、その後、その下のレイヤーの行のバイナリエンコーディング。
常に少なくとも3つのレイヤーがあります。最上層の列と最下層の行は回転させないでください。
ウォークスルー
小さな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]]
ます。
2番目のレイヤーの列は、[[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]]
回転した3番目のレイヤーは同じままで、左および6ステップを回転しても何も実行されません。
最後に[[1,1,0],[1,1,1]]
、1、3、および3ステップ上に回転した4番目のレイヤーはですが[[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']
がなることができると信じてい[[]]
ます。