Các hộp ASCII trông như thế này:
++ +---+ +------+ +---+ +---+
++ | | | | | | | |
| | | | | | | |
+-+ | | | | | | | |
+-+ | | | | | | +---+
+---+ | | | |
+--+ | | | | ++
| | | | | | ||
| | +------+ | | ||
+--+ | | ||
+---+ ||
||
+-----+ ||
+------------+ | | ++
| | | |
| | | |
+------------+ +-----+
Dưới đây là một số ví dụ về các hộp ASCII tương tự, được mã hóa:
++ +- -+ +- -+ +- -+ +- -+
++ | - | | - - | | - | | - |
| | | -- | | | | |
+-+ | | | | " | - |
+-+ | - | || | | +- -+
+- -+ | | | |
+--+ | -- | | | ++
| | | - - | " ||
| | +- -+ | | ||
+--+ | - | | |
+- -+ | |
-- ||
- - +- -+ ||
+- - - -+ | - - | ++
| -- -- | | = |
| -- -- | | - - |
+- - - -+ +- -+
- -
--
Dưới đây là một liên kết đến tất cả các hộp trường hợp thử nghiệm này ở định dạng dễ sao chép hơn. Thứ tự là tất cả các đầu vào theo sau bởi tất cả các đầu ra theo cùng một thứ tự.
Mục tiêu của bạn là lấy một hộp ASCII làm đầu vào và trả lại hộp đã nổ. Các quy tắc của nổ là:
- "+" không bao giờ thay đổi; không làm "-" hoặc "|" liền kề trực tiếp với "+"
- Bắt đầu từ các góc, dấu "-" và "|" di chuyển vào bên trong bởi một không gian nhiều hơn cùng một nhân vật gần góc đã làm. Nếu một "-" và "|" sẽ không bao giờ di chuyển đến cùng một vị trí, không di chuyển.
- Nếu "-" và "-" di chuyển đến cùng một vị trí, hãy đặt "=" vào vị trí đó. Nếu một "|" và "|" di chuyển đến cùng một vị trí, đặt một "vào vị trí đó. Chúng được tính là hai nhân vật tương ứng của chúng ở cùng một vị trí di chuyển theo hướng ngược lại.
- Hai "-" hoặc hai "|" có thể di chuyển qua nhau, như được thấy trong ví dụ dưới cùng bên trái.
- Nếu chiếc hộp đủ mỏng, nó sẽ bắt đầu mở rộng ra bên ngoài theo cùng một cách, luôn luôn di chuyển ra khỏi phía mà nó bắt đầu một phần.
- Kết quả phải đối xứng qua đường trung tâm theo cả hai hướng x và y (bỏ qua các dòng mới); điều này bao gồm các khoảng trắng, vì vậy kết quả có thể cần được đệm bằng các khoảng trắng để đáp ứng điều đó.
Chi tiết quy tắc:
- Đây là môn đánh gôn, vì vậy chương trình ngắn nhất tính bằng byte thắng.
- Tiêu chuẩn áp dụng.
- Bạn có thể giả sử mỗi dòng kết thúc bằng một ký tự dòng mới.
- Các ký tự duy nhất trong chuỗi đầu vào sẽ là "+", "-", "|", "" và "\ n" (dòng mới) và chuỗi đầu ra của bạn phải tuân theo cùng quy tắc, với việc thêm "=" và "càng nhiều nhân vật càng tốt.
- Bạn có thể tùy chọn có một dòng mới duy nhất ở cuối dòng cuối cùng.
- Hộp ASCII nhỏ nhất bạn cần xử lý là ví dụ trên cùng bên trái. Mỗi hộp ASCII sẽ có chính xác 4 "+", chính xác tại các góc của nó.
- Bạn sẽ cần xử lý các hộp có kích thước
m x n
cho bất kỳ số nguyênm,n
nào2<=m,n<256
(kích thước chuỗi lớn nhất có thể255*(255+1)
) - Bạn có thể giả sử rằng bạn sẽ luôn lấy một hộp ASCII hợp lệ làm đầu vào.
||
trong ví dụ đó cần phải là một "
thứ gì đó ...
"
mặc dù? Tôi đoán "
chỉ xuất hiện trên 3 chiều rộng hoặc lớn hơn?
"
? Ở bên trái, hay bên phải? Nó không thể là cả hai, nhưng nó không thể là vì kết quả là đối xứng.