ドキュメントやコメントなどを書くとき、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:
- デフォルトのI / Oが許可されます
- テーブルを文字列として、またはテーブルを含むファイルへのパスを含む、妥当な形式で入力を取得できます。
- ファイルに出力し、ファイル名を追加の引数として使用できます。
- ただし、入力ファイルを変更することはできません。(将来の編集を容易にするために保持する必要があります)
入力:
- 入力のすべての行がで同じ長さになるようにパディングされていると仮定でき
ます。 - 改行の後の最初の文字が表の境界の一部であると想定することはできません(空白である可能性があるため)。
- (テーブルの一部である)すべての文字
-=|が正確に2文字に接続されている場合、入力は有効なテーブルと見なされ、+に接続され、少なくとも1文字に水平および垂直の両方に接続され。 - プログラムは、有効な入力でエラーを生成しない場合があります。
- 入力が有効でない場合、動作は未定義であり、出力を生成できます。
- 入力には、ボックス描画文字を含む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テーブルを意味する場合、テーブル内のテキストは変更されないままである必要があるため、内部テーブルはテーブルを形成するとは見なされず、外部テーブルの境界の一部とは見なされません。
+-+抜粋が接続されたテーブルを形成するとは見なされないのはなぜですか?