Dada uma matriz de qualquer profundidade, desenhe seu conteúdo com bordas +-|
ao redor de cada subarray. Esses são os caracteres ASCII para mais, menos e tubo vertical.
Por exemplo, se a matriz for [1, 2, 3]
, desenhe
+-----+
|1 2 3|
+-----+
Para uma matriz aninhada, como [[1, 2, 3], [4, 5], [6, 7, 8]]
, desenhe
+-----------------+
|+-----+---+-----+|
||1 2 3|4 5|6 7 8||
|+-----+---+-----+|
+-----------------+
Para uma matriz irregular, como [[[1, 2, 3], [4, 5]], [6, 7, 8]]
, desenhe
+-------------------+
|+-----------+-----+|
||+-----+---+|6 7 8||
|||1 2 3|4 5|| ||
||+-----+---+| ||
|+-----------+-----+|
+-------------------+
Observe que há mais espaço após o desenho [6, 7, 8]
. Você pode desenhar o conteúdo na linha superior, central ou inferior, mas, conforme a sua escolha, deve permanecer consistente.
Esse desafio foi inspirado no verbo caixa<
de J.
Regras
- Isso é código-golfe, então o código mais curto vence.
- Builtins que resolvem isso não são permitidos.
- A matriz de entrada conterá apenas valores inteiros não negativos ou matrizes. Cada matriz será homogênea, o que significa que seus elementos serão apenas matrizes ou apenas números inteiros, mas nunca uma mistura de ambos.
- Cada sub-matriz pode ser aninhada em qualquer profundidade.
- A saída pode ser uma string ou uma matriz de strings, onde cada string é uma linha de saída.
Casos de teste
[]
++
||
++
[[], []]
+---+
|+++|
|||||
|+++|
+---+
[[], [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
desde que eu também limitei os números inteiros para não serem negativos. Depois, basta limpar a saída desses valores inválidos.