Для заданного двоичного трехмерного массива для каждого слоя циклически вращайте каждый из его столбцов на столько шагов, сколько указано двоичным кодированием столбцов слоя над ним, а затем циклически вращайте влево каждую из своих строк на столько шагов, сколько указано двоичное кодирование строк слоя под ним.
Там всегда будет как минимум три слоя. Столбцы верхнего слоя и строки нижнего слоя не должны вращаться.
Прохождение
Начнем с небольшого четырехслойного массива из трех столбцов с двумя строками:
[[[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]]
, но его ряды не поворачиваются впоследствии, так как это последний слой.
Снова собрав все слои вместе, мы получим бинарный трехмерный массив с автоповоротом:
[[[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']
могут стать[[]]
.