Wprowadzenie
Mapa Piekarza jest ważnym systemem dynamicznym, który wykazuje chaotyczne zachowanie. Jest to funkcja od kwadratu jednostkowego do siebie definiowana intuicyjnie w następujący sposób.
- Wytnij kwadrat pionowo na pół, uzyskując dwa prostokąty wielkości
0.5×1
. - Ułóż prawą połowę u góry po lewej, uzyskując jeden prostokąt wielkości
0.5×2
- Ściśnij prostokąt z powrotem w
1×1
kwadrat.
W tym wyzwaniu zaimplementujesz dyskretną wersję tej transformacji.
Wejście i wyjście
Twoje dane wejściowe to tablica 2D drukowalnych znaków ASCII i 2m×2n
niektórych białych znaków m, n > 0
. Dane wyjściowe są podobną tablicą uzyskaną w następujący sposób przy użyciu 6×4
tablicy
ABCDEF
GHIJKL
MNOPQR
STUVWX
jako przykład. Najpierw ułóż prawą połowę tablicy u góry lewej połowy:
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
Następnie podziel kolumny na pary znaków i niezależnie obróć każdą parę o 90 stopni zgodnie z ruchem wskazówek zegara, „kompresując” wysoki prostokąt z powrotem do pierwotnego kształtu:
JDKELF
VPWQXR
GAHBIC
SMTNUO
To jest poprawne wyjście dla powyższej tablicy.
Zasady
Formaty wejściowe i wyjściowe są elastyczne. Możesz używać ciągów rozdzielanych znakiem nowej linii, list ciągów lub tablic znaków 2D. Jednak dane wejściowe i wyjściowe muszą mieć dokładnie ten sam format: musisz być w stanie iterować swoje zgłoszenie dowolną liczbę razy na dowolnym prawidłowym wejściu.
Możesz napisać pełny program lub funkcję. Wygrywa najniższa liczba bajtów, a standardowe luki są niedozwolone.
Przypadki testowe
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*||_ _