前書き
ベーカーのマップは、混沌とした挙動を示す重要な力学系です。以下のように直感的に定義された単位正方形からそれ自体への関数です。
- 正方形を垂直に半分に切り、サイズが2つの長方形になるようにします
0.5×1
。 - 右半分を左上に積み重ね、サイズが1つの長方形になる
0.5×2
- 長方形を圧縮して
1×1
正方形に戻します。
この課題では、この変換の個別バージョンを実装します。
入出力
入力は、印刷可能なASCII文字の2D配列と2m×2n
一部のサイズの空白ですm, n > 0
。出力は、配列を使用して、次のように取得された同様の6×4
配列です
ABCDEF
GHIJKL
MNOPQR
STUVWX
例として。最初に、配列の右半分を左半分の上に積み重ねます。
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
次に、列を文字のペアに分割し、各ペアを時計回りに90度ずつ独立して回転させ、背の高い長方形を「圧縮」して元の形状に戻します。
JDKELF
VPWQXR
GAHBIC
SMTNUO
これは、上記の配列の正しい出力です。
ルール
入力および出力形式は柔軟です。改行で区切られた文字列、文字列のリスト、または文字の2D配列を使用できます。ただし、入力と出力がなければなりません正確に同じフォーマットを持っている:あなたは、任意の有効な入力の上ご応募を任意の回数繰り返すことができなければなりません。
完全なプログラムまたは関数のいずれかを作成できます。最小のバイトカウントが優先され、標準の抜け穴は許可されません。
テストケース
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*||_ _