Giới thiệu
Các bản đồ của Baker là một hệ thống động lực quan trọng là thể hiện hành vi hỗn loạn. Nó là một hàm từ hình vuông đơn vị đến chính nó được xác định bằng trực giác như sau.
- Cắt hình vuông theo chiều dọc làm đôi, dẫn đến hai hình chữ nhật có kích thước
0.5×1
. - Xếp nửa bên phải lên trên cùng bên trái, tạo thành một hình chữ nhật có kích thước
0.5×2
- Nén hình chữ nhật trở lại thành một
1×1
hình vuông.
Trong thử thách này, bạn sẽ thực hiện một phiên bản riêng biệt của chuyển đổi này.
Đầu vào và đầu ra
Đầu vào của bạn là một mảng 2D gồm các ký tự ASCII có thể in và khoảng trắng kích thước 2m×2n
cho một số m, n > 0
. Đầu ra của bạn là một mảng tương tự thu được như sau, sử dụng 6×4
mảng
ABCDEF
GHIJKL
MNOPQR
STUVWX
làm ví dụ Đầu tiên, xếp nửa bên phải của mảng lên trên nửa bên trái:
DEF
JKL
PQR
VWX
ABC
GHI
MNO
STU
Sau đó, chia các cột thành các cặp ký tự và xoay độc lập mỗi cặp 90 độ theo chiều kim đồng hồ, "nén" hình chữ nhật cao trở lại hình dạng ban đầu:
JDKELF
VPWQXR
GAHBIC
SMTNUO
Đây là đầu ra chính xác cho mảng trên.
Quy tắc
Các định dạng đầu vào và đầu ra là linh hoạt. Bạn có thể sử dụng các chuỗi được phân tách bằng dòng mới, danh sách các chuỗi hoặc mảng 2D của các ký tự. Tuy nhiên, đầu vào và đầu ra phải có cùng định dạng chính xác: bạn phải có khả năng lặp lại việc gửi của mình một số lần tùy ý trên bất kỳ đầu vào hợp lệ nào.
Bạn có thể viết một chương trình đầy đủ hoặc một chức năng. Số byte thấp nhất sẽ thắng và các sơ hở tiêu chuẩn không được phép.
Các trường hợp thử nghiệm
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*||_ _