Tarea
Su tarea es escribir un programa que genere cuadros ASCII en las ubicaciones especificadas por la entrada.
Entrada
Se le dará una lista de números. El formato aquí es un poco flexible, ya que puede usar cualquier deliminador que desee (p 1,2,3,4
. Ej . 1 2 3 4
, [1,2,3,4]
). La lista está en grupos de 4 y especifica el xywh
de cada cuadro. El ancho y la altura de cada cuadro serán al menos 2. x
y width
serán de izquierda a derecha. y
y height
son de arriba a abajo.
Salida
La representación se puede considerar como de derecha a izquierda, con el cuadro de la derecha dibujado primero, y cada cuadro después de eso está sobre él. Se permiten espacios finales, así como una nueva línea final.
Cómo manejar cajas superpuestas
El cuadro a la izquierda de la entrada es el cuadro superior, y nada se superpondrá. Cada cuadro después de que se representa solo en el espacio que no está contenido en un cuadro ya y no reemplazará el borde de un cuadro ya representado.
Estilo
El estilo de los cuadros es bastante estándar, se +
usa para esquinas, se -
usa para líneas horizontales y se |
usa para líneas verticales.
Ejemplos:
( >>>
denota 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
lugar de0 4 13 5
?Respuestas:
APL, 116 bytes
Esta es una función que toma una matriz de matrices y devuelve una matriz de caracteres.
Pruebas:
Explicación:
⎕IO←0
: establece el origen del índice en0
.⌈⌿↑⍵
: encuentra los valores más grandes para x, y, w y h+⌿2 2⍴
: x + w e y + hK←' '⍴⍨⌽
: crea una matriz de espacios x + w * y + h y la almacena enK
.{
...}¨⌽⍵
: para cada una de las cajas, en orden inverso,x y W H←⍵-⌊.5×⍳4
: Asignar las coordenadas ax
,y
,W
, yH
, y restar 1 a la vezW
yH
. (las coordenadas son exclusivas, los rangos de matriz APL son inclusivos).K[Y←y+⍳H;X←x+⍳W]←' '
: rellena el cuadro actual con espaciosK[Y;A←x+0 W]←'|'
: dibuja los lados verticalesK[B←y+0 H;X]←'-'
: dibuja los lados horizontalesK[B;A]←'+'
: establece los bordes en '+'K⊣
: luego, regresoK
.fuente
ES6,
228223217208 201198 bytesAcepta una matriz de matrices de coordenadas y devuelve una cadena.
Donde
\n
representa un carácter de nueva línea.Editar: guardado 5 bytes al invertir mis condiciones. Ahorró otros 6 bytes al cambiar de una matriz de matrices de caracteres a una matriz de cadenas. Se guardaron otros 9 bytes al introducir una variable temporal. Se guardaron otros 7 bytes al introducir una función auxiliar. ¡Ahorré otros 3 bytes al deshacer un guardado anterior!
fuente
Rubí,
153143Sin golf en el programa de prueba
fuente
SmileBASIC,
128125 bytesCapturas de pantalla (recortadas)
Explicación
M
almacena si está en la primera / última fila del cuadro (0
=+--+
,1
=| |
). En el primer paso a través del ciclo,M
es 0, y en todos los demás hasta el último, es 1.fuente
Pyth,
162145 bytesPuedes probarlo aquí
Salida del conjunto de pruebas:
¡Solución horrible! Solo esperando que alguien lo venza
fuente