Trong thử thách này, chúng tôi kết xuất giao diện người dùng của Ascii.
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
Mỗi bản vẽ như thế này được tạo thành từ một yếu tố , có thể chứa các phần tử con. Các yếu tố có thể được liệt kê dưới đây:
- Yếu tố văn bản. Chứa một hoặc nhiều dòng văn bản.
- Phần tử hộp. Chứa một phân khu được bao quanh với biên giới. Các đường viền có
+
s ở các góc và-
s và|
ở các cạnh. - Danh sách ngang. Chứa một hoặc nhiều yếu tố được sắp xếp theo chiều ngang.
- Danh sách dọc. Chứa một hoặc nhiều phần tử được xếp thẳng hàng với nhau theo chiều dọc và sang trái theo chiều ngang.
Mỗi phần tử là một hình chữ nhật.
Mỗi yếu tố, ngoài nội dung của nó, có một thuộc tính được gọi là đường cơ sở . Đường cơ sở được sử dụng để sắp xếp các phần tử theo chiều dọc: mọi phần tử của danh sách ngang được căn chỉnh sao cho đường cơ sở của chúng nằm trên cùng một dòng. Trong ví dụ dưới đây, đường cơ sở chứa các ký tự aeg
. Đường cơ sở của ba yếu tố hộp là (0-lập chỉ mục) 1
, 3
và 2
.
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
Các đường cơ sở được xác định theo các quy tắc sau:
- Đối với các thành phần văn bản, dòng văn bản đầu tiên là đường cơ sở, nghĩa là.
0
. - Đối với các phần tử hộp, đường cơ sở là 1 + đường cơ sở của lớp con.
- Đối với danh sách ngang, đường cơ sở là đường cơ sở tối đa trong danh sách (
3
trong ví dụ trên). - Đối với danh sách dọc, đường cơ sở là đường cơ sở của một yếu tố, phải được chỉ định trong đầu vào.
Đầu vào
Đầu vào là một đặc điểm kỹ thuật của một giao diện ở một số định dạng (ví dụ: list, json). Các ví dụ đầu vào có định dạng sau:
- Một phần tử chuỗi là một chuỗi:
"..."
- Một phần tử hộp là một danh sách mà phần tử đầu tiên là
"b"
:["b", subelement]
- Danh sách ngang là danh sách phần tử đầu tiên là
"h"
:["h", items...]
- Danh sách dọc là danh sách phần tử đầu tiên là
"v"
và phần tử thứ hai là số (được lập chỉ mục 0) của phần tử mà đường cơ sở được sử dụng:["v", n, items...]
Đầu ra
Đầu ra phải chứa các thành phần được căn chỉnh bằng các quy tắc tôi đã chỉ định ở trên. Đầu ra có thể là thiết bị xuất chuẩn, một danh sách các chuỗi hoặc bất cứ thứ gì có ý nghĩa.
Chấm điểm
Đây là mã golf , các quy tắc thông thường được áp dụng.
Các trường hợp thử nghiệm
1
["b", ["v", 0, ["h", ["b", "<- Previous"], ["b", "Next ->"]], "== The title ==\n\nLorem ipsum dolor\nsit amet...", ["b", "Post a comment"], ["b", "User X commented:\n\nThis is amazing!"], ["b", "User Y commented:\n\nlol"]]]
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
2
["h", ["b", ["v", 0, "a", "b"]], ["b", ["v", 2, "c", "d", "e"]], ["b", ["v", 1, "f", "g", "h"]]]
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
3
["h", ["b", ["v", 0, ["b", ["h", "a\nb", "c"]], "d", "e", ["h", ["h", "f"], ["b", ["h", "g"]], "h"]]], ["b", "ijk\nl\nmn\no"], ["v", 2, ["b", "pqrst"], ["b", "uv\nw"], ["b", "x"]], ["b", ["b", ["b", "yz"]]]]
+-----+
|pqrst|
+-----+
+--+
|uv|
|w | +------+
+-----+ +--+ |+----+|
|+--+ |+---++-+ ||+--+||
||ac| ||ijk||x| |||yz|||
||b | ||l |+-+ ||+--+||
|+--+ ||mn | |+----+|
|d ||o | +------+
|e |+---+
| +-+ |
|f|g|h|
| +-+ |
+-----+
4
["h", "a * b = ", ["v", 0, "a + a + ... + a", "\\_____________/", " b times"]]
a * b = a + a + ... + a
\_____________/
b times
a
nằm cùng dòng với nhau e
, vì cả hai đều nằm ở đường cơ sở của hộp. Tôi không hoàn toàn chắc chắn nếu "đường cơ sở" là từ chính xác cho điều này, tôi chỉ biết rằng nó được sử dụng trong lĩnh vực typography cho một mục đích tương tự.