Wenn ich Dokumentation, Kommentare usw. schreibe, liebe ich es, ASCII-Tabellen zu erstellen. Normalerweise sehen sie ziemlich gut aus, aber ich bin immer der Meinung, dass sie noch besser aussehen könnten - zumal UTF-8 / Unicode die Box-Zeichen enthält . Die Verwendung dieser Zeichen ist jedoch sehr mühsam, da zum Einfügen mehrere Tastendrücke erforderlich sind. Deine Aufgabe? Schreiben Sie ein Programm oder eine Funktion, die ASCII-Tabellen automatisch in das UTF-8 / Unicode-Äquivalent konvertieren kann.
Diese Herausforderung war Sandkasten .
Herausforderung
Schreiben Sie ein Programm, das eine ASCII-Tabelle als Eingabezeichenfolge angibt und die neu gezeichnete Tabelle mit den Unicode / UTF-8-Box-Zeichen ausgibt. Insbesondere sollten die Zeichen, die Teil der Tabelle sind, wie folgt übersetzt werden:
(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)
Einzelheiten
I / O:
- Standard-E / A ist zulässig
- Sie können Eingaben in jedem vernünftigen Format vornehmen, einschließlich der Tabelle als Zeichenfolge oder als Pfad zu einer Datei, die die Tabelle enthält.
- Sie können in eine Datei ausgeben und den Dateinamen als zusätzliches Argument verwenden.
- Allerdings können Sie die Eingabedatei nicht ändern . (Es sollte zur Erleichterung der zukünftigen Bearbeitung beibehalten werden.)
Eingang:
- Sie können davon ausgehen, dass jede Eingabezeile mit derselben Länge aufgefüllt wurde
.
- Sie können nicht davon ausgehen, dass das erste Zeichen nach einer neuen Zeile ein Teil der Tabellenränder ist (wie es Leerzeichen sein können).
- Die Eingabe wird als gültige Tabelle betrachtet, wenn alle Zeichen (die Teil der Tabelle sind)
-=|
mit genau zwei Zeichen+
verbunden sind und mit mindestens einem Zeichen sowohl horizontal als auch vertikal verbunden sind. - Ihr Programm erzeugt möglicherweise keine Fehler mit gültigen Eingaben.
- Wenn die Eingabe ungültig ist, ist das Verhalten undefiniert und Sie können eine beliebige Ausgabe erzeugen.
- Die Eingabe kann beliebige UTF-8-Zeichen enthalten, einschließlich der Box-Zeichen.
Ausgabe:
- Alle Zeichen
-=|+
, die nicht Teil der Tabelle sind, müssen unverändert bleiben. - Ebenso müssen alle anderen Zeichen unverändert bleiben.
- Eine einzelne führende und / oder nachfolgende Zeile ist zulässig.
Andere:
- Standardlücken sind wie gewohnt verboten.
- Wenn Ihre bevorzugte Sprache über eine integrierte Sprache verfügt, die dieses Problem löst, können Sie sie möglicherweise nicht verwenden.
- Dies sind Programme, Funktionen, Unterprogramme oder Anweisungen, die für diese Herausforderung ohne Zusätze gültig wären.
- Jedes der Zeichen, die für diese Herausforderung benötigt werden, ist drei Byte lang, wenn sie in UTF-8 codiert sind.
Verbundene Charaktere :
Ein Charakter ist mit einem anderen verbunden, wenn:
- Es ist
|
und ist direkt über oder unter+
oder|
; - Es ist
-
und ist direkt vor oder nach+
oder-
; - Es ist
=
und ist direkt vor oder nach+
oder=
; - Es ist
+
und direkt über oder unter|
oder+
, oder direkt vor oder nach-
,=
oder+
.
Ein Zeichen wird als Teil der Tabelle betrachtet, wenn es mit einem Zeichen verbunden ist, das Teil der Tabelle ist. Per Definition ist der erste +
in der Eingabe ein Teil der Tabelle.
Beispiele
Beispiele hier als kopierfähige Version verfügbar.
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>
+--+
Schließlich...
Das ist Code-Golf , also gewinnt die geringste Anzahl von Bytes. Viel Spaß beim Golfen!
Hello World
Tabelle meinen, wird davon ausgegangen , dass die inneren Tabellen keine Tabelle bilden, da der Text in der Tabelle unverändert bleiben muss und sie nicht als Teil der äußeren Tabellenränder betrachtet werden, da sie nicht ordnungsgemäß mit ihnen verbunden sind.
+----+
Beispiel meinen , liegt das daran, dass die Richtung der Ecken nicht eindeutig ist.
+-+
Auszüge nicht als zusammenhängende Tabelle betrachtet?