Tarefa
Sua tarefa é escrever um programa que produza caixas ASCII nos locais especificados pela entrada.
Entrada
Você receberá uma lista de números. O formato aqui é um pouco flexível, em que você pode usar qualquer deliminator você quer (por exemplo 1,2,3,4
, 1 2 3 4
, [1,2,3,4]
). A lista está nos grupos de 4 e especifica o xywh
de cada caixa. A largura e a altura de cada caixa serão pelo menos 2. x
e width
serão da esquerda para a direita. y
e height
são de cima para baixo.
Resultado
A renderização pode ser vista da direita para a esquerda, com a caixa à direita desenhada primeiro e todas as caixas depois disso. Espaços à direita são permitidos, bem como uma nova linha à direita.
Como lidar com caixas sobrepostas
A caixa à esquerda da entrada é a caixa superior e nada se sobrepõe. Cada caixa após ela é renderizada apenas no espaço que já não está contido em uma caixa e não substitui a borda de uma caixa já renderizada.
Estilo
O estilo das caixas é bastante padrão, sendo +
usado para cantos, -
usado para linhas horizontais e |
usado para linhas verticais.
Exemplos:
( >>>
indica entrada)
>>>0 0 11 4 7 2 8 4 3 5 8 3
+---------+
| |
| |---+
+---------+ |
| |
+---+------+
| |
+------+
>>>0 3 11 4 7 5 8 4 3 8 8 3 4 0 13 5
+-----------+
| |
| |
+---------+ |
| |-----+
| |---+
+---------+ |
| |
+---+------+
| |
+------+
>>>0 0 2 2
++
++
>>>2 2 5 3 1 1 7 5 0 0 9 7
+-------+
|+-----+|
||+---+||
||| |||
||+---+||
|+-----+|
+-------+
>>>0 0 3 3 2 0 3 3
+-+-+
| | |
+-+-+
4 0 13 5
, em vez de0 4 13 5
?Respostas:
APL, 116 bytes
Essa é uma função que pega uma matriz de matrizes e retorna uma matriz de caracteres.
Testes:
Explicação:
⎕IO←0
: defina a origem do índice como0
.⌈⌿↑⍵
: encontre os maiores valores para x, y, weh+⌿2 2⍴
: x + we y + hK←' '⍴⍨⌽
: crie uma matriz de espaços x + w * y + h e armazene-aK
.{
...}¨⌽⍵
: para cada uma das caixas, na ordem inversa,x y W H←⍵-⌊.5×⍳4
: Atribuir as coordenadas parax
,y
,W
eH
, e subtrair 1 de ambosW
eH
. (as coordenadas são exclusivas, os intervalos da matriz APL são inclusivos.)K[Y←y+⍳H;X←x+⍳W]←' '
: preencha a caixa atual com espaçosK[Y;A←x+0 W]←'|'
: desenha os lados verticaisK[B←y+0 H;X]←'-'
: desenha os lados horizontaisK[B;A]←'+'
: defina as arestas para '+'K⊣
: depois, volteK
.fonte
ES6,
228223217208 201198 bytesAceita uma matriz de matrizes de coordenadas e retorna uma string.
Onde
\n
representa um caractere de nova linha.Edit: Salvo 5 bytes, revertendo minhas condições. Economizou mais 6 bytes alternando de uma matriz de matrizes de caracteres para uma matriz de seqüências de caracteres. Economizou mais 9 bytes ao introduzir uma variável temporária. Economizou mais 7 bytes ao introduzir uma função auxiliar. Salvou mais 3 bytes desfazendo um salvamento anterior!
fonte
Ruby,
153143Ungolfed in program program
fonte
SmileBASIC,
128125 bytesCapturas de tela (cortadas)
Explicação
M
armazena se está na primeira / última linha da caixa (0
=+--+
,1
=| |
). Na primeira passagem pelo loop,M
é 0, e em todas as outras até a última, é 1.fonte
Pitão,
162145 bytesVocê pode tentar aqui
Saída do conjunto de testes:
Solução horrível! Apenas esperando alguém vencê-lo
fonte