Коли я пишу документацію, коментарі тощо, я люблю робити таблиці ASCII. Зазвичай вони виглядають досить добре, але я завжди відчуваю, що вони могли виглядати ще краще - тим більше, що UTF-8 / Unicode містить символи для малювання коробки . Однак ці символи дуже обтяжливі для використання, вимагаючи вставити кілька натискань клавіш. Ваше завдання? Напишіть програму або функцію, яка може автоматично перетворювати таблиці ASCII в еквівалент UTF-8 / Unicode.
Цей виклик був пісочницею .
Виклик
Напишіть програму, яка надає таблицю ASCII як вхідний рядок, виводить таблицю, перемальовану символами для малювання поля Unicode / 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:
- Дозволено введення / виведення за умовчанням
- Ви можете приймати дані в будь-якому розумному форматі, включаючи таблицю як рядок або шлях до файлу, що містить таблицю.
- Ви можете вивести файл і взяти ім'я файлу як додатковий аргумент.
- Однак ви не можете змінювати вхідний файл . (Це слід зберегти для зручності майбутнього редагування)
Вхід:
- Ви можете припустити, що кожен рядок вводу прокладений так, щоб він був однакової довжини
.
- Ви можете не припускати, що перший символ після нового рядка є частиною меж таблиці (як це може бути пробіл).
- Введення вважається дійсною таблицею, якщо всі символи (які є частиною таблиці)
-=|
з'єднані рівно двома символами і+
пов'язані принаймні з одним символом як горизонтально, так і вертикально. - Ваша програма може не створювати помилок при дійсних введеннях.
- Якщо введення недійсне, поведінка не визначена, і ви можете створити будь-який результат.
- Вхід може містити будь-які символи UTF-8, включаючи символи малювання поля.
Вихід:
- Будь-який із символів
-=|+
, які не входять до таблиці, повинен бути залишений таким, який є. - Аналогічно, будь-які інші символи повинні бути залишені як є.
- Допускається одна провідна та / або зворотна нова лінія.
Інший:
- Стандартні лазівки заборонені, як зазвичай.
- Якщо у вашій бажаній мові є вбудована, яка вирішує цю проблему, ви можете не використовувати її.
- Це означає програми, функції, підпрограми чи інструкції, які були б дійсними поданнями для цього виклику без доповнень.
- Кожен із символів, необхідних у цьому виклику, має три байти, коли вони закодовані в UTF-8.
Підключені символи :
Символ підключений до іншого, якщо:
- Він є
|
і знаходиться безпосередньо над або нижче+
або|
; - Він є
-
і знаходиться безпосередньо перед або після+
або-
; - Він є
=
і знаходиться безпосередньо перед або після+
або=
; - Він знаходиться
+
і знаходиться безпосередньо над або нижче|
або+
, або безпосередньо перед або після-
,=
або+
.
Символ вважається частиною таблиці, якщо він пов'язаний з будь-яким символом, що є частиною таблиці. За визначенням, перша +
у вході є частиною таблиці.
Приклади
Приклади доступні тут як версія для копіювання.
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>
+--+
Нарешті ...
Це код-гольф , тому виграє найменша кількість байтів. Щасливого гольфу!
Hello World
таблицю, не вважається, що внутрішні таблиці утворюють таблицю, оскільки текст всередині таблиці повинен залишатися незмінним, і вони не вважаються частиною зовнішніх меж таблиці, оскільки вони не підключені належним чином до них.
+----+
приклад, це було б тому, що напрямок кутів був би неоднозначним.
+-+
уривки не вважаються складовою пов'язаної таблиці?