문서, 주석 등을 쓸 때 ASCII 테이블을 만드는 것이 좋습니다. 그것들은 보통 꽤 좋아 보이지만 결국 UTF-8 / Unicode에 박스 그리기 문자가 포함되어 있기 때문에 항상 더 좋아 보일 수 있다고 생각합니다 . 그러나 이러한 문자는 사용하기에 매우 부담이되므로 삽입하려면 몇 번의 키 누름이 필요합니다. 당신의 작업? ASCII 테이블을 UTF-8 / Unicode로 자동 변환 할 수있는 프로그램이나 함수를 작성하십시오.
이 도전은 샌드 박스 였다.
도전
ASCII 테이블을 입력 문자열로 제공하는 프로그램을 작성하면 테이블이 유니 코드 / UTF-8 상자 도면 문자로 다시 그려집니다. 특히, 테이블의 일부인 문자는 다음과 같이 변환되어야합니다.
(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)
세부
I / O :
- 기본 I / O 가 허용됩니다
- 테이블을 문자열로 포함하거나 테이블이 포함 된 파일의 경로를 포함하여 합리적인 형식으로 입력 할 수 있습니다.
- 파일로 출력하고 파일 이름을 추가 인수로 사용할 수 있습니다.
- 그러나 입력 파일을 수정할 수 없습니다 . (나중에 쉽게 편집 할 수 있도록 유지해야합니다)
입력:
- 입력의 모든 행이와 같은 길이로 채워 졌다고 가정 할 수 있습니다
.
- 줄 바꿈 뒤의 첫 번째 문자는 공백 일 수 있으므로 테이블 경계의 일부라고 가정 할 수 없습니다.
- 모든 문자 (테이블의 일부)
-=|
가 정확히 두 문자+
에 연결되고 하나 이상의 문자에 가로 및 세로로 연결된 경우 입력은 유효한 테이블로 간주됩니다 . - 프로그램이 유효한 입력으로 오류를 생성하지 않을 수 있습니다.
- 입력이 유효하지 않은 경우 동작이 정의되지 않으며 출력을 생성 할 수 있습니다.
- 입력은 상자 그리기 문자를 포함하여 UTF-8 문자를 포함 할 수 있습니다.
산출:
-=|+
테이블의 일부가 아닌 문자 는 그대로 두어야합니다 .- 마찬가지로 다른 문자는 그대로 두어야합니다.
- 단일 선행 및 / 또는 후행 줄 바꿈이 허용됩니다.
다른:
- 표준 허점 은 평소와 같이 금지되어 있습니다.
- 원하는 언어에이 문제를 해결하는 기본 제공 언어가있는 경우 사용하지 못할 수 있습니다.
- 이는 프로그램, 기능, 서브 루틴 또는 추가없이이 과제에 대한 유효한 제출이 될 수있는 명령을 의미합니다.
- 이 챌린지에 필요한 각 문자는 UTF-8로 인코딩 될 때 길이가 3 바이트입니다.
연결된 캐릭터 :
다음과 같은 경우 문자가 다른 문자에 연결됩니다.
- 그것은 인
|
직접 위나 아래+
또는|
; - 그것은이다
-
과 이전 또는 이후에 바로+
나-
; - 그것은이다
=
과 이전 또는 이후에 바로+
나=
; - 그것은 인
+
직접 위나 아래|
또는+
또는 또는 후 바로 전에-
,=
또는+
.
문자가 테이블의 일부인 문자에 연결된 경우 문자는 테이블의 일부로 간주됩니다. 정의 +
에 따르면 입력 의 첫 번째 는 테이블의 일부입니다.
예
복사 가능 버전으로 여기에 사용 가능한 예제가 있습니다 .
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>
+--+
드디어...
이것은 code-golf 이므로 가장 적은 양의 바이트가 이깁니다. 행복한 골프!
Hello World
테이블 을 의미하는 경우 테이블 내부의 텍스트는 변경되지 않고 내부 테이블은 테이블에 연결되지 않으므로 외부 테이블 경계의 일부로 간주되지 않기 때문에 내부 테이블은 테이블을 구성하는 것으로 간주되지 않습니다.
+-+
발췌가 연결된 테이블을 구성하지 않는 이유는 무엇입니까?