Introducción
El mapa de Baker es un sistema dinámico importante que exhibe un comportamiento caótico. Es una función desde el cuadrado de la unidad a sí misma definida intuitivamente de la siguiente manera.
- Corta el cuadrado verticalmente por la mitad, dando como resultado dos rectángulos de tamaño
0.5×1
. - Apila la mitad derecha sobre la izquierda, dando como resultado un rectángulo de tamaño
0.5×2
- Comprime el rectángulo en un
1×1
cuadrado.
En este desafío, implementará una versión discreta de esta transformación.
Entrada y salida
Su entrada es una matriz 2D de caracteres ASCII imprimibles y espacios en blanco de tamaño 2m×2n
para algunos m, n > 0
. Su salida es una matriz similar obtenida de la siguiente manera, utilizando la 6×4
matriz
ABCDEF
GHIJKL
MNOPQR
STUVWX
como ejemplo. Primero, apile la mitad derecha de la matriz sobre la mitad izquierda:
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
Luego, divida las columnas en pares de caracteres y gire independientemente cada par 90 grados en el sentido de las agujas del reloj, "comprimiendo" el rectángulo alto de nuevo a la forma original:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Esta es la salida correcta para la matriz anterior.
Reglas
Los formatos de entrada y salida son flexibles. Puede usar cadenas delimitadas por nueva línea, listas de cadenas o matrices 2D de caracteres. Sin embargo, la entrada y la salida deben tener exactamente el mismo formato: debe poder iterar su envío un número arbitrario de veces en cualquier entrada válida.
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten.
Casos de prueba
Input:
12
34
Output:
42
31
Input:
Hell
! o
d -
lroW
Output:
lol
o W-
!H e
ldr
Input:
ABCDEF
GHIJKL
MNOPQR
STUVWX
Output:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Input:
*___ ___ o
o|__) |__) *
*| | o
o __ __ *
*| | _ o
o|__ |__| *
Output:
|_____) *o
|_ _ *o
||_ __| *o
o*|_____)
o* |_ _
o*||_ _