Надаючи двійковий 3D-масив, для кожного шару циклічно обертайте кожен свій стовпець на стільки кроків, на які вказує двійкове кодування стовпців шару над ним, а потім циклічно обертайте ліворуч кожен його рядок стільки кроків, скільки вказано двійкове кодування рядків шару під ним.
Завжди буде як мінімум три шари. Стовпці верхнього шару та рядки нижнього шару не повинні повертатися.
Прохідний
Почнемо з невеликого 4-шарового, дворядного, 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 кроків відповідно, без видимих змін.
Третій шар, [[0,1,1],[1,1,1]]
повернутий вгору на 2, 1 і 3 кроки, залишається тим самим, і жоден з обертових лівих 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']
може стати обома[[]]
.