introduzione
La mappa di Baker è un importante sistema dinamico che mostra un comportamento caotico. È una funzione dall'unità quadrata a se stessa definita intuitivamente come segue.
- Taglia il quadrato verticalmente a metà, risultando in due rettangoli di dimensioni
0.5×1
. - Impila la metà destra sopra la sinistra, ottenendo un rettangolo di dimensioni
0.5×2
- Comprimi il rettangolo in un
1×1
quadrato.
In questa sfida, implementerai una versione discreta di questa trasformazione.
Ingresso e uscita
Il tuo input è un array 2D di caratteri ASCII stampabili e spazi bianchi di dimensioni 2m×2n
per alcuni m, n > 0
. L'output è un array simile ottenuto come segue, utilizzando l' 6×4
array
ABCDEF
GHIJKL
MNOPQR
STUVWX
come esempio. Innanzitutto, impila la metà destra dell'array sopra la metà sinistra:
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
Quindi, dividi le colonne in coppie di caratteri e ruota indipendentemente ogni coppia di 90 gradi in senso orario, "comprimendo" il rettangolo alto alla forma originale:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Questo è l'output corretto per l'array sopra.
Regole
I formati di input e output sono flessibili. È possibile utilizzare stringhe delimitate da newline, elenchi di stringhe o matrici 2D di caratteri. Tuttavia, l'input e l'output devono avere lo stesso formato esatto: devi essere in grado di ripetere il tuo invio un numero arbitrario di volte su qualsiasi input valido.
È possibile scrivere un programma completo o una funzione. Vince il conteggio di byte più basso e non sono consentite scappatoie standard.
Casi test
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*||_ _