Tâche
Votre tâche consiste à écrire un programme qui produira des boîtes ASCII aux emplacements spécifiés par l'entrée.
Contribution
Vous recevrez une liste de numéros. Le format ici est un peu flexible, que vous pouvez utiliser deliminator vous voulez (par exemple 1,2,3,4
, 1 2 3 4
, [1,2,3,4]
). La liste est en groupes de 4 et spécifie le xywh
de chaque case. La largeur et la hauteur de chaque boîte seront d'au moins 2. x
et width
sont de gauche à droite. y
et height
sont de haut en bas.
Production
Le rendu peut être considéré comme de droite à gauche, avec la boîte à droite dessinée en premier, et chaque boîte après cela est dessus. Les espaces de fin sont autorisés, ainsi qu'une nouvelle ligne de fin.
Comment gérer les boîtes qui se chevauchent
La case à gauche de l'entrée est la case du haut, et rien ne la chevauchera. Chaque boîte après son rendu est uniquement dans l'espace qui n'est pas déjà contenu dans une boîte et ne remplacera pas la bordure d'une boîte déjà rendue.
Style
Le style des boîtes est assez standard, +
utilisé pour les coins, -
utilisé pour les lignes horizontales et |
utilisé pour les lignes verticales.
Exemples:
( >>>
indique une entrée)
>>>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
plutôt que0 4 13 5
?Réponses:
APL, 116 octets
Il s'agit d'une fonction qui prend un tableau de tableaux et renvoie une matrice de caractères.
Tests:
Explication:
⎕IO←0
: définissez l'origine de l'index sur0
.⌈⌿↑⍵
: trouver les plus grandes valeurs pour x, y, w et h+⌿2 2⍴
: x + w et y + hK←' '⍴⍨⌽
: créez une matrice d'espaces x + w * y + h et stockez-laK
.{
...}¨⌽⍵
: pour chacune des cases, dans l'ordre inverse,x y W H←⍵-⌊.5×⍳4
: Attribuer des coordonnées àx
,y
,W
, etH
, et soustraire 1 à la foisW
etH
. (les coordonnées sont exclusives, les plages de tableaux APL sont inclusives.)K[Y←y+⍳H;X←x+⍳W]←' '
: remplir la case courante avec des espacesK[Y;A←x+0 W]←'|'
: dessiner les côtés verticauxK[B←y+0 H;X]←'-'
: dessiner les côtés horizontauxK[B;A]←'+'
: définissez les bords sur '+'K⊣
: après, revenezK
.la source
ES6,
228223217208 201198 198 octetsAccepte un tableau de tableaux de coordonnées et renvoie une chaîne.
Où
\n
représente un caractère de nouvelle ligne.Edit: sauvé 5 octets en inversant mes conditions. 6 octets supplémentaires enregistrés en passant d'un tableau de tableaux de caractères à un tableau de chaînes. 9 octets supplémentaires enregistrés en introduisant une variable temporaire. Enregistré 7 octets supplémentaires en introduisant une fonction d'assistance. Sauvegardé 3 octets supplémentaires en annulant une sauvegarde précédente!
la source
Ruby,
153143Non testé dans le programme de test
la source
SmileBASIC,
128125 octetsCaptures d'écran (recadrées)
Explication
M
stocke si c'est sur la première / dernière ligne de la boîte (0
=+--+
,1
=| |
). Lors du premier passage dans la boucle, ilM
est égal à 0, et sur tous les autres jusqu'au dernier, il est égal à 1.la source
Pyth,
162145 octetsVous pouvez l'essayer ici
Sortie de la suite de tests:
Horrible solution! J'attends juste que quelqu'un le batte
la source