Dada uma matriz 3D binária, para cada camada, gire ciclicamente cada uma de suas colunas tantas etapas, conforme indicado pela codificação binária das colunas da camada acima dela, e gire ciclicamente à esquerda de cada uma de suas linhas, quantas etapas forem indicadas por a codificação binária das linhas da camada abaixo dela.
Sempre haverá pelo menos três camadas. As colunas da camada superior e as linhas da camada inferior não devem ser giradas.
Walk-through
Vamos começar com a pequena matriz de 4 camadas, 2 linhas e 3 colunas:
[[[1,0,1],
[1,0,0]],
[[1,0,1],
[0,1,1]],
[[0,1,1],
[1,1,1]],
[[1,1,0],
[1,1,1]]]
A primeira etapa é avaliar os números codificados em binário pelas colunas e linhas de cada camada:
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]]]
A primeira camada [[1,0,1],[1,0,0]]
não terá suas colunas rotacionadas, mas suas linhas serão rotacionadas ciclicamente para a esquerda 5 etapas e 3 etapas respectivamente, tornando-se assim [[1,1,0],[1,0,0]]
.
A segunda camada [[1,0,1],[0,1,1]]
,, terá suas colunas giradas ciclicamente para cima 3, 0 e 2 etapas respectivamente, fornecendo [[0,0,1],[1,1,1]]
e, em seguida, as linhas serão giradas ciclicamente para a esquerda 3 e 7 etapas respectivamente, sem alteração visível.
A terceira camada, [[0,1,1],[1,1,1]]
girada para cima 2, 1 e 3 etapas, permanece a mesma e a rotação esquerda 6 e 7 não faz nada.
Finalmente, a quarta camada, [[1,1,0],[1,1,1]]
girada para cima 1, 3 e 3 etapas [[1,1,1],[1,1,0]]
, é , mas suas linhas não são giradas depois, como é a última camada.
Juntar todas as camadas novamente, fornece a matriz 3D auto-rotativa binária:
[[[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 exemplo:
[[[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
o corte para a rotação, acredito que ambos['0']
podem se tornar[[]]
.APL + WIN,
5339 bytesMuito obrigado a Adám por salvar 14 bytes
Experimente online! Cortesia de Dyalog Classic
Solicita a entrada de uma matriz 3d do formulário:
que produz:
Explicação:
fonte
¨
, apenas processe toda a matriz de uma só vez. Experimente online!R ,
226216205 bytes-21 bytes graças a digEmAll
Experimente online!
fonte
05AB1E ,
4139 bytesIsso parece muito longo .. Definitivamente pode ser jogado um pouco mais.
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
Wolfram Language (Mathematica) ,
138131125123 bytesExperimente online!
Map[Thread]
é equivalente aTranspose[a, {1,3,2}]
, que transpõe as colunas e linhas.Fold[#+##&]
é mais curto do queIntegerDigits[#,2]
para converter de binário.fonte