Thử thách này được lấy cảm hứng từ một câu đố tôi đã chơi, bao gồm những mảnh xốp như thế này:
mà phải được lắp ráp thành các khối 3D, như thế này:
Các mảnh ghép có thể được xem như là lưới của các ô vuông 5 * 5, có các ô vuông 3 * 3 ở giữa luôn luôn chắc chắn, trong khi 16 ô vuông trên các cạnh có thể là hình khối hoặc rỗng.
Một mảnh sẽ được mô tả bằng chuỗi 16 ký tự ( 0
s và 1
s), đại diện cho cấu hình của các cạnh của nó ( 0
= trống, 1
= solid), theo thứ tự theo chiều kim đồng hồ, bắt đầu từ góc trên cùng bên trái.
Ví dụ: chuỗi:
0101001000101101
đại diện cho tác phẩm này:
# #
####
####
####
# #
Để khớp các mảnh lại với nhau để tạo thành khối lập phương, mọi mảnh có thể được xoay theo bất kỳ hướng nào. Ví dụ, đây là các phép quay hợp lệ của mảnh được hiển thị ở trên:
# # # # # ## #
#### #### #### ####
#### #### #### ####
#### #### #### ####
# # # # ## # #
# # # # # ## #
#### #### #### ####
#### #### #### ####
#### #### #### ####
# # # # # # ##
Thử thách
Viết chương trình hoặc hàm lấy 6 mảnh ghép đầu vào và in hoặc trả về biểu diễn 2D của khối đã giải.
Đầu vào
Đầu vào sẽ là một chuỗi gồm 6 hàng, trong đó mỗi hàng gồm 16 0
hoặc 1
ký tự, đại diện cho các cạnh của một mảnh (theo định dạng được mô tả ở trên).
Có thể giả định rằng có một giải pháp cho đầu vào.
Các dòng mới là tùy chọn.
Đầu ra
Kết quả sẽ là một đại diện ASCII của khối đã giải, được mở ra dưới dạng 2D, như thế này (sơ đồ sử dụng ký hiệu Cube của Rubik cho tên bên):
+---+
|BA |
|CK |
| |
+---+---+---+---+
|LE |DO |RI |UP |
|FT |WN |GHT| |
| | | | |
+---+---+---+---+
|FR |
|ONT|
| |
+---+
Để tránh khả năng trình bày giải pháp theo nhiều cách, phần được đặt DOWN sẽ luôn là phần đầu tiên có trong đầu vào, trong cùng một vòng quay như được chỉ định ở đó.
Mỗi phần sẽ được biểu thị bằng đồ họa dưới dạng ma trận 5 * 5, sử dụng khoảng trắng để biểu thị các ô vuông trống. Đối với hình vuông rắn, bạn có thể sử dụng bất kỳ ký tự không phải không gian nào bạn muốn, miễn là:
- bất kỳ mảnh ghép nào cũng sẽ có hình vuông rắn được biểu diễn bằng cùng một ký tự
- bất kỳ hai mảnh liền kề sử dụng các ký tự khác nhau
Không gian đệm ở bên phải và dòng mới theo dõi là tùy chọn.
Các trường hợp thử nghiệm
1.
Đầu vào:
0010010101010101
0010001011011010
0101001001010010
0010110100101101
0010110110101101
0010001011010101
Đầu ra:
@ @
@@@
@@@@@
@@@
** **@#@** *# #
***#####***#####
*****###*****###
***#####***#####
* @#@#** ** # #
@@@@
@@@@
@@@@
@ @
2.
Đầu vào:
0001110110101101
1010010111011101
0101010101010010
1010001000100011
1010001001010001
0110010100100010
Đầu ra:
@
@@@@
@@@@
@@@@
** **@@## * *# #
****#####****###
****###*****####
****#####***####
** *#@#@# * # #
@@@@
@@@@
@@@@
@ @
3.
Đầu vào:
0101001011011010
0010001000100010
0101001011010010
0101010101011010
0101101001011101
1010001001011101
Đầu ra:
@ @@
@@@@@
@@@
@@@@@
* * @#@#* * #
*****###*****###
***#####***#####
*****###*****###
* ##@##* * #
@@@@
@@@@
@@@@
@@ @@
Đây là codegolf, vì vậy chương trình ngắn nhất tính bằng byte sẽ thắng.