이 과제에서는 Ascii 사용자 인터페이스를 렌더링합니다.
+----------------------+
|+-----------++-------+|
||<- Previous||Next ->||
|+-----------++-------+|
|== The title == |
| |
|Lorem ipsum dolor |
|sit amet... |
|+--------------+ |
||Post a comment| |
|+--------------+ |
|+-----------------+ |
||User X commented:| |
|| | |
||This is amazing! | |
|+-----------------+ |
|+-----------------+ |
||User Y commented:| |
|| | |
||lol | |
|+-----------------+ |
+----------------------+
이와 같은 각 도면은 하나의 요소 로 구성되며 하위 요소를 포함 할 수 있습니다. 가능한 요소는 다음과 같습니다.
- 텍스트 요소. 하나 이상의 텍스트 줄을 포함합니다.
- 상자 요소. 테두리로 둘러싸인 하나의 하위 요소를 포함합니다. 테두리는
+
모서리와 모서리에-
s가|
있습니다. - 가로 목록. 가로로 정렬 된 하나 이상의 요소를 포함합니다.
- 수직 목록. 서로 수직으로 수평으로 정렬 된 하나 이상의 요소를 포함합니다.
모든 요소는 사각형입니다.
각 요소에는 내용 외에도 baseline 이라는 속성이 있습니다. 기준선은 요소를 수직으로 정렬하는 데 사용됩니다. 가로 목록의 모든 요소는 기준선이 동일한 선에 있도록 정렬됩니다. 아래 예에서 기준선은 문자를 포함합니다 aeg
. 세 상자 요소의 기준선은 (0- 인덱싱 됨 1
) 3
및 2
입니다.
+-+
|c|+-+
+-+|d||f|
|a||e||g|
|b|+-+|h|
+-+ +-+
기준은 다음 규칙에 따라 결정됩니다.
- 텍스트 요소의 경우 첫 번째 텍스트 행은 기준선입니다.
0
. - 상자 요소의 경우 기준선은 1 + 하위 요소의 기준선입니다.
- 가로 목록의 경우 기준선은 목록의 최대 기준선입니다 (
3
위 예에서). - 수직리스트의 경우 기준선은 요소의 기준선이며 입력에 지정해야합니다.
입력
입력은 일부 형식 (예 : 목록, json)의 인터페이스 사양입니다. 예제 입력의 형식은 다음과 같습니다.
- 문자열 요소는 문자열입니다.
"..."
- 상자 요소는 첫 번째 요소가
"b"
다음과 같은 목록입니다 .["b", subelement]
- 가로 목록은 첫 번째 요소가
"h"
다음과 같은 목록입니다 .["h", items...]
- 세로 목록은 첫 번째 요소가있는 목록
"v"
이고 두 번째 요소는 기준선이 사용되는 요소의 (0- 인덱싱 된) 번호입니다.["v", n, items...]
산출
출력에는 위에서 지정한 규칙을 사용하여 정렬 된 요소가 포함되어야합니다. 출력은 stdout, 문자열 목록 또는 다른 의미가있을 수 있습니다.
채점
이것은 code-golf 이며 일반적인 규칙이 적용됩니다.
테스트 사례
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|
+-+ +-+
삼
["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
2
달콤한 예수 .. 그것은 다시 한 번 지오 시티입니다.
—
매직 문어 Urn
기준이 어떻게 작동하는지 잘 모르겠습니다. 더 자세히 설명해 주시겠습니까?
—
Stan Strum
@StanStrum 기준선은 가로 목록의 항목을 세로로 정렬하는 데 사용됩니다. 품목의 기준선이 일치해야합니다. 그것들은 모두 같은 물리적 행이어야합니다. 예를 들어, swcond 예제에서 첫 번째 상자는 아래쪽으로 이동하여 글자
—
fergusq
a
가 e
상자의 기준선에 있기 때문에 와 같은 줄에 있습니다. 나는 "기준선"이 이것에 대한 올바른 단어인지 확실하지 않다. 나는 그것이 타이포그래피 분야에서 유사한 목적으로 사용된다는 것을 알고있다.
@fergusq 첫 번째 절에서 : "텍스트 요소의 경우 첫 번째 텍스트 행은 기준선입니다 (예 : 0)". 이것은 다른 "기준선"이 텍스트를 위로 이동하고 있음을 의미합니까?
—
Stan Strum
@fergusq베이스 라인은 올바른 단어, IIRC 여야합니다. CSS flexbox에 대한 설명에도 사용됩니다.
—
ASCII 전용