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*||_ _
c2k
lugar deck/lk2
.c2k
divide la cadena en dos partes iguales.Julia, 136 bytes
Una implementación muy sencilla. No es una entrada particularmente competitiva, ¡pero fue divertido!
Esto crea una función lambda que acepta una matriz bidimensional como entrada y devuelve una matriz bidimensional transformada.
Ungolfed + explicación:
Para llamarlo, asigne un nombre a la función, por ejemplo
f=A->(...)
.Salida de ejemplo:
Y prueba de que se puede encadenar arbitrariamente:
Las sugerencias son bienvenidas como siempre, y me complacerá brindarle más explicaciones.
fuente
CJam,
2524 bytesImplementación de especificaciones directas. Explicación:
Pruébalo en línea aquí
fuente
JavaScript (ES6),
104141Editar Revisando la especificación, descubrí que el número de filas debe ser par (me perdí esto antes). Por lo tanto, no es demasiado complicado encontrar la posición de fuente correcta para cada carácter en la salida en un solo paso.
Prueba en la consola Firefox / FireBug
Salida
fuente
J,
4539 bytesJ tiene una función de teselación (corte
;.
) que ayuda mucho.fuente
Haskell,
128127 bytesUso:
f ["12", "34"]
->["42","31"]
Cómo funciona:
Editar: @Zgarb encontró un byte para guardar.
fuente
g x=x
para el caso de la lista vacía.GNU sed -r, 179 bytes
La puntuación incluye +1 para el
-r
argumento de sed.Me tomó un tiempo descubrir cómo hacer esto
sed
, pero creo que lo tengo ahora:Tenga en cuenta que todos los espacios en blanco anteriores deben ser tabcaracteres individuales . Los comentarios no están incluidos en el puntaje de golf.
Tenga en cuenta también que esto hace un uso extensivo de los
:
caracteres marcadores. Si la secuencia de entrada contiene:
, se producirá un comportamiento indefinido. Esto puede mitigarse reemplazando todo:
con algún carácter que no se imprima (por ejemplo, BEL) sin costo alguno para la puntuación de golf.Entrada y salida es una lista de cadenas separadas por tabulaciones:
fuente
J,
3332 caracteresUn verbo monádico.
Explicación
Comencemos definiendo
Y
como nuestra entrada de muestra.La primera parte (
-:@#@{. (}. ,. {.) |:
) se divideY
por la mitad y se agrega y luego termina:En la segunda parte (
_2 |.\"1
) dividimos esto en pares de dos y los invertimos:Finalmente (
0 2 ,.@|:
), transponemos la matriz según sea necesario y descartamos el eje final:Toda la expresión con espacios en blanco insertados:
Y como verbo explícito:
fuente