Mọi lập trình viên đều biết rằng hình chữ nhật □
thực sự thú vị. Để làm trầm trọng thêm niềm vui này, những sơ đồ dễ thương và mờ này có thể được chuyển thành các nhóm dấu ngoặc đan xen.
Thử thách này là nghịch đảo trước đây của tôi .
Giả sử bạn có một nhóm các hình chữ nhật lồng vào nhau như vậy:
+------------+
| |
+--+-+ +----+-+
| | | | | |
| | | +---+--+ | |
| | | | | | | |
+--+-+ | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Ghi chú bổ sung:
- Không có hai
+
s sẽ không liền kề - Không có hai hình chữ nhật sẽ chia sẻ một cạnh hoặc góc
- Sẽ chỉ có tối đa một cạnh dọc trong mỗi cột
Bước đầu tiên là nhìn vào cạnh trái của bất kỳ hình chữ nhật nào. Chỉ định nó một trong bốn loại khung ({[<
. Tôi chọn [
.
+------------+
| |
[--+-] +----+-+
[ | ] | | |
[ | ] +---+--+ | |
[ | ] | | | | |
[--+-] | +-+--+-+-+-+
| | | | | | | |
| | | | | | | |
| | | | | | | | +-+
| +-+-+--+ | | | | |
| | | | | | +-+-+-+
+-----+-+----+ | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Bây giờ hãy nhìn vào hình chữ nhật bên trái thứ hai. Vì nó chồng lên một [
hình chữ nhật, nó phải thuộc loại khác. Tôi chọn (
.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] +---+--+ ) |
[ ( ] | | | ) |
[--(-] | +-+--+-)-+-+
( | | | | ) | |
( | | | | ) | |
( | | | | ) | | +-+
( +-+-+--+ ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Hình chữ nhật bên trái nhất tiếp theo không giao nhau với bất kỳ hình chữ nhật trước, nhưng không lồng trong hình trước đó. Tôi chọn gán nó (
một lần nữa. Thông thường, một dự đoán tốt để gán một hình chữ nhật cùng loại với những gì nó được lồng bên trong nếu có thể, nhưng đôi khi cần quay lại.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( +-+--)-)-+-+
( ( | | ) ) | |
( ( | | ) ) | |
( ( | | ) ) | | +-+
( (-+-+--) ) | | | |
( | | ) | | +-+-+-+
(-----+-+----) | | | | | |
| | | | | +-+ |
| +------+ | | |
| | | |
+----------+ +-----+
Hình chữ nhật tiếp theo này có thể được chỉ định [
lại.
(------------)
( )
[--(-] +----)-+
[ ( ] | ) |
[ ( ] (---+--) ) |
[ ( ] ( | ) ) |
[--(-] ( [-+--)-)-+-]
( ( [ | ) ) | ]
( ( [ | ) ) | ]
( ( [ | ) ) | ] +-+
( (-[-+--) ) | ] | |
( [ | ) | ] +-+-+-+
(-----[-+----) | ] | | | |
[ | | ] | +-+ |
[ +------+ ] | |
[ ] | |
[----------] +-----+
Hình chữ nhật tiếp theo này là một niềm vui. Nó giao nhau cả a (
và [
hình chữ nhật, vì vậy tôi có thể gọi nó là {
hình chữ nhật (hoặc <
không ai thích chúng).
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] +-+
( (-[-{--) ) } ] | |
( [ { ) } ] +-+-+-+
(-----[-{----) } ] | | | |
[ { } ] | +-+ |
[ {------} ] | |
[ ] | |
[----------] +-----+
Hai hình chữ nhật cuối cùng không phải là xấu. Chúng có thể thuộc bất kỳ hai loại khác nhau.
(------------)
( )
[--(-] {----)-}
[ ( ] { ) }
[ ( ] (---{--) ) }
[ ( ] ( { ) ) }
[--(-] ( [-{--)-)-}-]
( ( [ { ) ) } ]
( ( [ { ) ) } ]
( ( [ { ) ) } ] {-}
( (-[-{--) ) } ] { }
( [ { ) } ] <-{-}->
(-----[-{----) } ] < { } >
[ { } ] < {-} >
[ {------} ] < >
[ ] < >
[----------] <----->
Đọc ra các hình chữ nhật, tôi nhận được [(]([{))}]<{}>
. Đây sẽ là một đầu ra có thể cho đầu vào trên. Đây là danh sách nhiều tùy chọn có thể, không đầy đủ:
[(]([{))}]<{}>
<(>(<{))}>{()}
{<}[{(]>)}[<>]
any of the 4! permutations of ([{<, you get the idea...
Đầu vào
Các hình chữ nhật nghệ thuật ASCII, trên các giả định rằng chúng không rõ ràng (xem ghi chú ở trên) và có thể được chuyển đổi chính xác thành một chuỗi dấu ngoặc. Bạn có thể giả sử không có dấu cách hoặc được đệm vào một hình chữ nhật, với dòng mới tùy chọn. Sẽ không có khoảng trắng hàng đầu.
Đầu ra
Bất kỳ một trong các chuỗi khung hợp lệ tuân theo các giới hạn giao nhau của các hình chữ nhật. Khác với một dòng mới tùy chọn, không nên có ký tự nào khác ngoài dấu ngoặc. Nguyên tắc chính là, nếu hai hình vuông giao nhau, thì chúng nên được gán các loại khung khác nhau.
Mục tiêu
Đây là mã golf, (thiếu) số lượng so với chất lượng.
+
góc trên bên trái, và sau đó (ngay bên dưới) +
cho góc dưới bên trái?