Khi tôi viết tài liệu, bình luận, v.v. Tôi thích làm bảng ASCII. Chúng thường trông khá đẹp, nhưng tôi luôn cảm thấy rằng chúng có thể trông thậm chí còn tốt hơn - đặc biệt là vì UTF-8 / Unicode bao gồm các ký tự vẽ hộp . Tuy nhiên, các ký tự này rất nặng nề để sử dụng, đòi hỏi một số lần nhấn phím để chèn. Nhiệm vụ của bạn? Viết chương trình hoặc hàm có thể tự động chuyển đổi các bảng ASCII thành tương đương UTF-8 / Unicode.
Thử thách này đã được sandbox .
Thử thách
Viết chương trình, đưa ra bảng ASCII dưới dạng chuỗi đầu vào, xuất ra bảng vẽ lại với các ký tự vẽ hộp Unicode / UTF-8. Cụ thể, các ký tự là một phần của bảng nên được dịch như sau:
(Unicode, 3 bytes each in UTF-8)
- to ─ (\u2500)
| to │ (\u2502)
= to ═ (\u2550)
and + to one of:
┌ (\u250C), ┐ (\u2510), └ (\u2514), ┘ (\u2518),
├ (\u251C), ┤ (\u2524), ┬ (\u252C), ┴ (\u2534),
┼ (\u253C)
or, if '=' on either side:
╒ (\u2552), ╕ (\u2555), ╘ (\u2558), ╛ (\u255D),
╞ (\u255E), ╡ (\u2561), ╤ (\u2564), ╧ (\u2567),
╪ (\u256A)
Chi tiết
Tôi / O:
- I / O mặc định được cho phép
- Bạn có thể lấy đầu vào ở bất kỳ định dạng hợp lý nào, bao gồm bảng dưới dạng chuỗi hoặc đường dẫn đến tệp chứa bảng.
- Bạn có thể xuất ra một tệp và lấy tên tệp làm đối số bổ sung.
- Tuy nhiên, bạn không thể sửa đổi tệp đầu vào . (Nó nên được giữ lại để dễ chỉnh sửa trong tương lai)
Đầu vào:
- Bạn có thể giả sử rằng mọi hàng đầu vào đã được đệm có cùng độ dài với
.
- Bạn không được cho rằng ký tự đầu tiên sau dòng mới là một phần của đường viền bảng (vì nó có thể là khoảng trắng).
- Đầu vào được coi là một bảng hợp lệ nếu tất cả các ký tự (là một phần của bảng)
-=|
được kết nối với chính xác hai ký tự và+
được kết nối với ít nhất một ký tự theo cả chiều ngang và chiều dọc. - Chương trình của bạn có thể không tạo ra bất kỳ lỗi nào với đầu vào hợp lệ.
- Nếu đầu vào không hợp lệ, hành vi không được xác định và bạn có thể tạo ra bất kỳ đầu ra nào.
- Đầu vào có thể chứa bất kỳ ký tự UTF-8 nào, bao gồm các ký tự vẽ hộp.
Đầu ra:
- Bất kỳ ký tự
-=|+
nào không phải là một phần của bảng phải được giữ nguyên. - Tương tự, bất kỳ ký tự nào khác phải được giữ nguyên.
- Một dòng mới hàng đầu và / hoặc trailing được cho phép.
Khác:
- Lỗ hổng tiêu chuẩn bị cấm, như thường lệ.
- Nếu ngôn ngữ ưa thích của bạn có tích hợp sẵn để giải quyết vấn đề này, bạn không thể sử dụng ngôn ngữ đó.
- Điều này có nghĩa là các chương trình, chức năng, chương trình con hoặc hướng dẫn sẽ được đệ trình hợp lệ cho thử thách này mà không cần bổ sung.
- Mỗi ký tự cần thiết trong thử thách này dài ba byte khi chúng được mã hóa bằng UTF-8.
Các nhân vật được kết nối :
Một ký tự được kết nối với một ký tự khác, nếu:
- Nó là
|
và trực tiếp trên hoặc dưới+
hoặc|
; - Nó là
-
và trực tiếp trước hoặc sau+
hoặc-
; - Nó là
=
và trực tiếp trước hoặc sau+
hoặc=
; - Nó là
+
và trực tiếp trên hoặc dưới|
hoặc+
, hoặc trực tiếp trước hoặc sau-
,=
hoặc+
.
Một ký tự được coi là một phần của bảng, nếu nó được kết nối với bất kỳ ký tự nào là một phần của bảng. Theo định nghĩa, đầu tiên +
trong đầu vào là một phần của bảng.
Ví dụ
Các ví dụ có sẵn ở đây dưới dạng phiên bản có thể sao chép.
Input: Output:
+------------------+ ┌──────────────────┐
| Hello+World! | │ Hello+World! │
+==================+ ╞══════════════════╡
| This is+my first | -> │ This is+my first │
|+-+ code|golf +-+| │+-+ code|golf +-+│
|+-+chall|enge! +-+| │+-+chall|enge! +-+│
+------------------+ └──────────────────┘
+===+===+===+ ╒═══╤═══╤═══╕
| 1 | 2 | 3 | │ 1 │ 2 │ 3 │
+---+===+===+===+ ┌───╪═══╪═══╪═══╡
| 1 | 1 | 2 | 3 | │ 1 │ 1 │ 2 │ 3 │
+---+---+---+---+ -> ├───┼───┼───┼───┤
| 2 | 2 | 4 | 6 | │ 2 │ 2 │ 4 │ 6 │
+---+---+---+---+ ├───┼───┼───┼───┤
|-3 |-3 |-6 |-9 | │-3 │-3 │-6 │-9 │
+===+---+---+---+ ╘═══╧───┴───┴───┘
+-----+ -> <Undefined>
+-----+ -> ┌─────┐
+-----+ └─────┘
+-----------------+
| Hello, World! |
| This is invalid | -> <Undefined>
| input |
-----------------+
++++ ┌┬┬┐
++++ -> ├┼┼┤
++++ └┴┴┘
+--+
++++ -> <Undefined>
+--+
Cuối cùng ...
Đây là môn đánh gôn , nên số byte ít nhất sẽ thắng. Chúc bạn chơi golf vui vẻ!
Hello World
bảng đầu tiên , các bảng bên trong không được coi là tạo thành một bảng vì văn bản bên trong bảng phải không thay đổi và chúng không được coi là một phần của đường viền bảng bên ngoài vì chúng không được kết nối với chúng đúng cách.
+-+
đoạn trích liên tiếp không được xem xét để tạo thành một bảng được kết nối?