Dato un array 3D binario, per ogni livello, ruotare ciclicamente su ciascuna delle sue colonne tutti i passaggi indicati dalla codifica binaria delle colonne del livello sopra di esso, quindi ruotare ciclicamente a sinistra ciascuna delle sue righe quanti passaggi indicati da la codifica binaria delle righe del livello sottostante.
Ci saranno sempre almeno tre livelli. Le colonne del livello superiore e le righe del livello inferiore non devono essere ruotate.
Procedura dettagliata
Iniziamo con il piccolo array a 4 strati, 2 file e 3 colonne:
[[[1,0,1],
[1,0,0]],
[[1,0,1],
[0,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,0],
[1,1,1]]]
Il primo passo è valutare i numeri codificati in binario dalle colonne e dalle righe di ogni livello:
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]]]
Il primo strato [[1,0,1],[1,0,0]]
non ruoterà le sue colonne, ma le sue file verranno ruotate ciclicamente a sinistra rispettivamente di 5 e 3 passi, diventando così [[1,1,0],[1,0,0]]
.
Il secondo strato, [[1,0,1],[0,1,1]]
avrà le sue colonne ruotate ciclicamente rispettivamente di 3, 0 e 2 passi, dando [[0,0,1],[1,1,1]]
, e quindi le righe saranno ciclicamente ruotate a sinistra rispettivamente 3 e 7 passi, senza cambiamenti visibili.
Il terzo livello, [[0,1,1],[1,1,1]]
ruotato di 2, 1 e 3 passi rimane lo stesso, e nemmeno la rotazione di 6 e 7 passi a sinistra fa nulla.
Infine, il quarto strato, [[1,1,0],[1,1,1]]
ruotato di 1, 3 e 3 passi è [[1,1,1],[1,1,0]]
, ma le sue file non vengono ruotate in seguito, poiché è l'ultimo strato.
Riunendo tutti i livelli, ci dà l'array 3D binario auto-ruotato:
[[[1,1,0],
[1,0,0]],
[[0,0,1],
[1,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,1],
[1,1,0]]]
Casi di esempio:
[[[1,0,1],[1,0,0]],[[1,0,1],[0,1,1]],[[0,1,1],[1,1,1]],[[1,1,0],[1,1,1]]]
dà
[[[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]]]
dà
[[[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]]]
dà
[[[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
durante il taglio per la rotazione, credo che entrambi['0']
possano diventare[[]]
.