Dada una matriz binaria en 3D, para cada capa, gire cíclicamente cada una de sus columnas tantos pasos como lo indica la codificación binaria de las columnas de la capa encima de ella, y luego gire cíclicamente a la izquierda cada una de sus filas tantos pasos como lo indique La codificación binaria de las filas de la capa debajo de ella.
Siempre habrá al menos tres capas. Las columnas de la capa superior y las filas de la capa inferior no deben rotarse.
Recorrido
Comencemos con la pequeña matriz de 4 capas, 2 filas y 3 columnas:
[[[1,0,1],
[1,0,0]],
[[1,0,1],
[0,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,0],
[1,1,1]]]
El primer paso es evaluar los números codificados en binario por las columnas y filas de cada capa:
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 primera capa, [[1,0,1],[1,0,0]]
no tendrá sus columnas giradas, pero sus filas serán rotadas cíclicamente a la izquierda 5 pasos y 3 pasos respectivamente, convirtiéndose así [[1,1,0],[1,0,0]]
.
La segunda capa, [[1,0,1],[0,1,1]]
tendrá sus columnas giradas cíclicamente 3, 0 y 2 pasos respectivamente, dando [[0,0,1],[1,1,1]]
, y luego las filas se girarán cíclicamente 3 y 7 pasos respectivamente, sin cambio visible.
La tercera capa, [[0,1,1],[1,1,1]]
girada hacia arriba 2, 1 y 3 pasos, permanece igual, y tampoco lo hace la rotación hacia la izquierda 6 y 7 pasos.
Finalmente, la cuarta capa, [[1,1,0],[1,1,1]]
rotada 1, 3 y 3 pasos es [[1,1,1],[1,1,0]]
, pero sus filas no se giran después, ya que es la última capa.
Al volver a juntar todas las capas, se obtiene la matriz binaria de rotación automática en 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]]]
Casos de ejemplo:
[[[1,0,1],[1,0,0]],[[1,0,1],[0,1,1]],[[0,1,1],[1,1,1]],[[1,1,0],[1,1,1]]]
da
[[[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]]]
da
[[[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]]]
da
[[[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 el corte para la rotación, creo que ambos['0']
pueden convertirse[[]]
.APL + WIN,
5339 bytesMuchas gracias a Adám por guardar 14 bytes.
Pruébalo en línea! Cortesía de Dyalog Classic.
Solicita la entrada de una matriz 3D del formulario:
cuyos rendimientos:
Explicación:
fuente
¨
, simplemente procese toda la matriz a la vez. Pruébalo en línea!R ,
226216205 bytes-21 bytes gracias a digEmAll
Pruébalo en línea!
fuente
05AB1E ,
4139 bytesEsto se siente demasiado tiempo ... Definitivamente se puede jugar un poco más.
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente
Wolfram Language (Mathematica) ,
138131125123 bytesPruébalo en línea!
Map[Thread]
es equivalente aTranspose[a, {1,3,2}]
, que transpone las columnas y filas.Fold[#+##&]
es más corto queIntegerDigits[#,2]
para convertir de binario.fuente