Étant donné un tableau binaire 3D, pour chaque couche, faites pivoter cycliquement vers le haut chacune de ses colonnes autant d'étapes que l'indique le codage binaire des colonnes de la couche au-dessus, puis faites pivoter cycliquement vers la gauche chacune de ses lignes autant d'étapes que l'indique l'encodage binaire des lignes de la couche en dessous.
Il y aura toujours au moins trois couches. Les colonnes de la couche supérieure et les lignes de la couche inférieure ne doivent pas être tournées.
Procédure pas à pas
Commençons par le petit tableau à 4 couches, 2 lignes et 3 colonnes:
[[[1,0,1],
[1,0,0]],
[[1,0,1],
[0,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,0],
[1,1,1]]]
La première étape consiste à évaluer les nombres encodés en binaire par les colonnes et les lignes de chaque couche:
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]]]
La première couche, [[1,0,1],[1,0,0]]
n'aura pas ses colonnes tournées, mais ses rangées seront tournées cycliquement à gauche de 5 étapes et 3 étapes respectivement, devenant ainsi [[1,1,0],[1,0,0]]
.
La deuxième couche,, [[1,0,1],[0,1,1]]
verra ses colonnes pivotées cycliquement respectivement de 3, 0 et 2 pas, ce qui donnera [[0,0,1],[1,1,1]]
, puis les rangées seront pivotées cycliquement de 3 et 7 pas respectivement, sans changement visible.
La troisième couche, [[0,1,1],[1,1,1]]
tournée de 2, 1 et 3 pas vers le haut, reste la même, et la rotation des pas de 6 et 7 vers la gauche ne fait rien non plus.
Enfin, la quatrième couche, [[1,1,0],[1,1,1]]
tournée de 1, 3 et 3 étapes, l'est [[1,1,1],[1,1,0]]
, mais ses rangées ne sont pas tournées par la suite, comme c'est la dernière couche.
Remettre toutes les couches ensemble, nous donne le tableau 3D auto-tourné binaire:
[[[1,1,0],
[1,0,0]],
[[0,0,1],
[1,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,1],
[1,1,0]]]
Exemples de cas:
[[[1,0,1],[1,0,0]],[[1,0,1],[0,1,1]],[[0,1,1],[1,1,1]],[[1,1,0],[1,1,1]]]
donne
[[[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]]]
donne
[[[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]]]
donne
[[[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
pendant le découpage pour la rotation, je crois que les deux['0']
peuvent devenir[[]]
.