任意の深さの配列を指定して、+-|
各サブ配列の周囲の境界線でその内容を描画します。これらは、プラス、マイナス、および垂直パイプのASCII文字です。
たとえば、配列がの場合[1, 2, 3]
、描画
+-----+
|1 2 3|
+-----+
のようなネストされた配列の場合[[1, 2, 3], [4, 5], [6, 7, 8]]
、draw
+-----------------+
|+-----+---+-----+|
||1 2 3|4 5|6 7 8||
|+-----+---+-----+|
+-----------------+
のような不規則な配列の場合[[[1, 2, 3], [4, 5]], [6, 7, 8]]
、draw
+-------------------+
|+-----------+-----+|
||+-----+---+|6 7 8||
|||1 2 3|4 5|| ||
||+-----+---+| ||
|+-----------+-----+|
+-------------------+
描画後、より多くのスペースがあることに注意してください[6, 7, 8]
。一番上の線、中央の線、または一番下の線にコンテンツを描画できますが、どちらを選択した場合でも、一貫性を保つ必要があります。
この課題は、Jのボックス動詞に触発されました<
。
ルール
- これはコードゴルフなので、最短のコードが優先されます。
- これを解決するビルトインは許可されていません。
- 入力配列には、非負の整数値または配列のみが含まれます。各配列は同種です。つまり、その要素は配列のみまたは整数のみのいずれかであり、両方が混在することはありません。
- 各サブ配列は、任意の深さにネストできます。
- 出力は、文字列として、または各文字列が出力の行である文字列の配列としてのいずれかです。
テストケース
[]
++
||
++
[[], []]
+---+
|+++|
|||||
|+++|
+---+
[[], [1], [], [2], [], [3], []]
+-----------+
|++-++-++-++|
|||1||2||3|||
|++-++-++-++|
+-----------+
[[[[[0]]]]]
+---------+
|+-------+|
||+-----+||
|||+---+|||
||||+-+||||
|||||0|||||
||||+-+||||
|||+---+|||
||+-----+||
|+-------+|
+---------+
[[[[[4, 3, 2, 1]]]], [[[3, 2, 1]]], [[2, 1]], [1]]
+---------------------------------+
|+-------------+---------+-----+-+|
||+-----------+|+-------+|+---+|1||
|||+---------+|||+-----+|||2 1|| ||
||||+-------+|||||3 2 1|||+---+| ||
|||||4 3 2 1|||||+-----+|| | ||
||||+-------+|||+-------+| | ||
|||+---------+|| | | ||
||+-----------+| | | ||
|+-------------+---------+-----+-+|
+---------------------------------+
-1
、整数を負でない値に制限したため、配列にセンチネル値を埋め込むこともできます。次に、それらの無効な値の出力をクリーンアップする必要があります。