É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[[]]
.APL + WIN,
5339 octetsUn grand merci à Adám pour économiser 14 octets
Essayez-le en ligne! Gracieuseté de Dyalog Classic
Invite à saisir un tableau 3D de la forme:
ce qui donne:
Explication:
la source
¨
, il suffit de traiter l'ensemble du tableau à la fois. Essayez-le en ligne!R ,
226216205 octets-21 octets grâce à digEmAll
Essayez-le en ligne!
la source
05AB1E ,
4139 octetsCela semble beaucoup trop long. Peut certainement être joué au golf encore plus.
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
Wolfram Language (Mathematica) ,
138131125123 octetsEssayez-le en ligne!
Map[Thread]
est équivalent àTranspose[a, {1,3,2}]
, qui transpose les colonnes et les lignes.Fold[#+##&]
est plus court queIntegerDigits[#,2]
pour la conversion de binaire.la source