Biorąc pod uwagę binarną tablicę 3D, dla każdej warstwy cyklicznie obracaj w górę każdą jej kolumnę o tyle kroków, ile wskazuje kodowanie binarne kolumn warstwy nad nią, a następnie cyklicznie obracaj w lewo każdy z jej rzędów o tyle kroków, ile wskazuje binarne kodowanie wierszy warstwy poniżej.
Zawsze będą co najmniej trzy warstwy. Kolumny górnej warstwy i wiersze dolnej warstwy nie powinny być obracane.
Walk-through
Zacznijmy od małej 4-warstwowej, 2-rzędowej, 3-kolumnowej tablicy:
[[[1,0,1],
[1,0,0]],
[[1,0,1],
[0,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,0],
[1,1,1]]]
Pierwszym krokiem jest ocena liczb zakodowanych binarnie według kolumn i wierszy każdej warstwy:
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]]]
Pierwsza warstwa [[1,0,1],[1,0,0]]
nie będzie obracana kolumnami, ale jej rzędy będą cyklicznie obracane odpowiednio w lewo o 5 kroków i 3 kroki, stając się w ten sposób [[1,1,0],[1,0,0]]
.
Druga warstwa, [[1,0,1],[0,1,1]]
będzie miała swoje kolumny cyklicznie obracane odpowiednio o 3, 0 i 2 kroki, dając [[0,0,1],[1,1,1]]
, a następnie rzędy są cyklicznie obracane odpowiednio w lewo 3 i 7 kroków, bez widocznych zmian.
Trzecia warstwa, [[0,1,1],[1,1,1]]
obrócona w górę o 2, 1 i 3 kroki, pozostaje taka sama, a obracanie w lewo o 6 i 7 kroków nic nie robi.
Wreszcie czwarta warstwa, [[1,1,0],[1,1,1]]
obrócona o 1, 3 i 3 stopnie, jest [[1,1,1],[1,1,0]]
, ale jej rzędy nie są później obracane, ponieważ jest to ostatnia warstwa.
Ponowne połączenie wszystkich warstw daje nam binarną samobrotową macierz 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]]]
Przykładowe przypadki:
[[[1,0,1],[1,0,0]],[[1,0,1],[0,1,1]],[[0,1,1],[1,1,1]],[[1,1,0],[1,1,1]]]
daje
[[[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]]]
daje
[[[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]]]
daje
[[[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
podczas krojenia rotacji, uważam, że oba['0']
mogą się stać[[]]
.