Aufgabe
Ihre Aufgabe ist es, ein Programm zu schreiben, das ASCII-Boxen an den durch die Eingabe angegebenen Stellen ausgibt.
Eingang
Sie erhalten eine Liste mit Zahlen. Das Format ist hier ein wenig flexibel, dass Sie jeden deliminator verwenden , können Sie wollen (zB 1,2,3,4
, 1 2 3 4
, [1,2,3,4]
). Die Liste ist in 4er-Gruppen und gibt die xywh
einzelnen Felder an. Die Breite und Höhe jeder Box beträgt mindestens 2. x
und width
ist von links nach rechts. y
und height
sind von oben nach unten.
Ausgabe
Das Rendern kann als von rechts nach links betrachtet werden, wobei das Feld rechts zuerst gezeichnet wird und jedes Feld danach darüber ist. Nachgestellte Leerzeichen sowie eine nachfolgende Newline sind zulässig.
Umgang mit überlappenden Feldern
Das Feld links neben der Eingabe ist das oberste Feld, und nichts wird es überlappen. Jede Box danach wird nur in dem Bereich gerendert, der noch nicht in einer Box enthalten ist, und ersetzt nicht den Rand einer bereits gerenderten Box.
Stil
Der Stil der Kästchen ist ziemlich normal und +
wird für Ecken, -
für horizontale Linien und |
für vertikale Linien verwendet.
Beispiele:
( >>>
bezeichnet Eingabe)
>>>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
als0 4 13 5
?Antworten:
APL, 116 Bytes
Dies ist eine Funktion, die ein Array von Arrays verwendet und eine Zeichenmatrix zurückgibt.
Tests:
Erläuterung:
⎕IO←0
: Setzen Sie den Indexursprung auf0
.⌈⌿↑⍵
: Finden Sie die größten Werte für x, y, w und h+⌿2 2⍴
: x + w und y + hK←' '⍴⍨⌽
: Erstellen Sie eine Matrix aus x + w * y + h Leerzeichen und speichern Sie sie inK
.{
...}¨⌽⍵
: für jede der Boxen in umgekehrter Reihenfolge,x y W H←⍵-⌊.5×⍳4
: Die Koordinaten zuzuordnenx
,y
,W
, undH
, und subtrahieren 1 von beidenW
undH
. (Koordinaten sind exklusiv, APL-Array-Bereiche sind inklusive.)K[Y←y+⍳H;X←x+⍳W]←' '
: Füllen Sie das aktuelle Feld mit LeerzeichenK[Y;A←x+0 W]←'|'
: Zeichnen Sie die vertikalen SeitenK[B←y+0 H;X]←'-'
: Zeichnen Sie die horizontalen SeitenK[B;A]←'+'
: setze die Kanten auf '+'K⊣
: danach zurückK
.quelle
ES6,
228223217208 201198 BytesAkzeptiert ein Array von Koordinatenarrays und gibt eine Zeichenfolge zurück.
Wobei
\n
ein Zeilenumbruchzeichen steht.Bearbeiten: 5 Bytes durch Umkehren meiner Bedingungen gespeichert. Weitere 6 Bytes wurden gespeichert, indem von einem Array von Zeichenarrays zu einem Array von Zeichenfolgen gewechselt wurde. Weitere 9 Bytes wurden durch Einfügen einer temporären Variablen gespeichert. Weitere 7 Bytes wurden durch Einführung einer Hilfsfunktion gespeichert. Weitere 3 Bytes wurden gespeichert, indem eine vorherige Speicherung rückgängig gemacht wurde!
quelle
Ruby,
153143Ungolfed im Testprogramm
quelle
SmileBASIC,
128125 BytesScreenshots (beschnitten)
Erläuterung
M
speichert, ob es sich in der ersten / letzten Zeile der Box befindet (0
=+--+
,1
=| |
). Beim ersten Durchgang durch die SchleifeM
ist 0 und bei allen anderen bis zum letzten ist es 1.quelle
Pyth,
162145 BytesSie können es hier versuchen
Ausgabe der Testsuite:
Schreckliche Lösung! Ich warte nur darauf, dass jemand es schlägt
quelle