introduction
La carte de Baker est un système dynamique important qui présente un comportement chaotique. C'est une fonction du carré unitaire à elle-même définie intuitivement comme suit.
- Coupez le carré verticalement en deux, ce qui donne deux rectangles de taille
0.5×1
. - Empilez la moitié droite en haut à gauche, ce qui donne un rectangle de taille
0.5×2
- Compressez le rectangle en un
1×1
carré.
Dans ce défi, vous allez implémenter une version discrète de cette transformation.
Entrée et sortie
Votre entrée est un tableau 2D de caractères ASCII imprimables et des espaces de taille 2m×2n
pour certains m, n > 0
. Votre sortie est un tableau similaire obtenu comme suit, en utilisant le 6×4
tableau
ABCDEF
GHIJKL
MNOPQR
STUVWX
par exemple. Tout d'abord, empilez la moitié droite du tableau en haut de la moitié gauche:
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
Ensuite, divisez les colonnes en paires de caractères et tournez indépendamment chaque paire de 90 degrés dans le sens des aiguilles d'une montre, en "compressant" le grand rectangle à sa forme d'origine:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Il s'agit de la sortie correcte pour le tableau ci-dessus.
Règles
Les formats d'entrée et de sortie sont flexibles. Vous pouvez utiliser des chaînes délimitées par des sauts de ligne, des listes de chaînes ou des tableaux 2D de caractères. Cependant, l'entrée et la sortie doivent avoir exactement le même format: vous devez pouvoir répéter votre soumission un nombre arbitraire de fois sur n'importe quelle entrée valide.
Vous pouvez écrire soit un programme complet soit une fonction. Le nombre d'octets le plus bas gagne et les failles standard sont interdites.
Cas de 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*||_ _