Pegue duas listas de números inteiros não negativos e produza uma caixa ASCII, conforme definido abaixo.
- Cantos e interseções são vantagens:
+
(código ASCII 43) - Linhas verticais são barras
|
(código ASCII 124) - Linhas horizontais são desvantagens
-
(código ASCII 45)
A primeira lista de entrada especifica o número de menos entre cada sinal de mais, na direção horizontal.
A segunda lista de entrada especifica o número de barras entre cada sinal de mais, na direção vertical.
É mais fácil explicar com alguns exemplos:
0 // No minuses between each + sign
0 // No bars between + signs
++
++
------------------
1 2 // First a single minus, then two minuses
1 2 // First one bar, then two bars
+-+--+
| | |
+-+--+
| | |
| | |
+-+--+
------------------
1 0 3 0 2 0
2 1 0 0
+-++---++--++
| || || ||
| || || ||
+-++---++--++
| || || ||
+-++---++--++
+-++---++--++
+-++---++--++
Esclarecimentos:
- A ordem e o formato da entrada são opcionais
- Somente as caixas devem ser impressas / exibidas, mas um espaço à direita ou novas linhas são aceitas.
- Opcionalmente, você pode adicionar 1 a todos os valores de entrada, se for mais conveniente. O segundo exemplo seria o seguinte:
2 3; 2 3
.
Este é o código golf, portanto o código mais curto em bytes vence.
Respostas:
MATL ,
252221 bytesUsa entradas
1
adicionadas (permitidas pelo desafio).Experimente online!
Explicação
O código inicialmente cria uma matriz que contém
1
os índices da coluna de caracteres não espaciais no resultado final, e0
caso contrário. Portanto, se a primeira entrada for[2 1 4 1 3 1]
(seria[1 0 3 0 2 0]
no formato 0), essa matriz seráObserve como o comprimento das execuções de zeros está relacionado à entrada. Especificamente, essa matriz é criada da seguinte maneira:
1
.1
. No exemplo, isso dá[3 4 8 9 12 13]
.1
às entradas os índices (com base em 1) fornecidos na etapa 2. As entradas intermediárias são definidas automaticamente como0
.Uma matriz semelhante é criada para as linhas. A segunda entrada
[3 2 1 1]
(ou[2 1 0 0 ]
) forneceAgora, o segundo array é multiplicado
2
, transposto e adicionado com transmissão ao primeiro. Isso fornece à matriz 2DA indexação na string
'|-+ '
fornece o resultado final como uma matriz de caracteres 2D. Como a indexação é modular e baseada em 1, o índice0
corresponde ao último elemento (espaço).fonte
Python 2, 117 bytes
Experimente em ideone.
Não esperando muito com isso. Realmente simples, apenas usa junções python e multiplicação de strings para reunir tudo.
fonte
JavaScript (ES6), 83 bytes
A saída inclui duas novas linhas finais.
fonte
CJam, 50 bytes
Experimente online!
fonte
Pitão, 45 bytes
Um programa que recebe entrada de duas listas separadas por vírgula no STDIN e imprime o resultado.
Provavelmente ainda há golfe a ser feito aqui.
Experimente online
Explicação que vem depois
fonte
Haskell, 55 bytes
Define uma função
g
que pega as duas listas de entrada e retorna uma lista contendo as linhas da saídafonte
PowerShell v2 +, 89 bytes
Caramba, acho que não consigo pegar JavaScript.
Recebe entrada
$a
e$b
como matrizes explícitas. Define a variável$x
como a linha superior das caixas com base no looping$a
e em alguma concatenação de strings. Isso é encapsulado em parênteses, para ser colocado no pipeline. Então, percorremos$b
, cada iteração colocando duas strings no pipeline - a mesma string de estilo, mas com espaços e, em|
vez de hífens+
, e, e$x
. Essas seqüências são todas reunidas do pipeline com um implícitoWrite-Output
na conclusão do programa, com uma nova linha padrão entre elas.Exemplos
fonte
Ruby, 66 bytes
fonte
Geléia ,
3026 bytesTeste em TryItOnline
Quão?
A entrada obtida é uma lista das duas listas,
[vertical, horizontal]
e usa a opção incrementada- portanto, o exemplo 3 leva.
[[3,2,1,1], [2,1,4,1,3,1]]
Cada uma delas é então convertida em uma matriz booleana indicando respectivamente o rowType ou rowCharacterType, por exemplo,
[[1,0,0,1,0,1,1,1], [1,0,1,1,0,0,0,1,1,0,0,1,1]]
as caixas são construídas criando as linhas de os caracteres identificados pelas combinações rowType e rowCharacterType - ou seja, um rowType identifica um
"+-"
ou"| "
e um rowCharacterType identifica um desses dois caracteres.fonte