Der Weihnachtsmann konnte alle Geschenke, die die Elfen über Nacht gestohlen hatten, wiederaufbereiten! Jetzt muss er sie zum Verpacken ans Fließband schicken. Er hat in der Regel eine Kamera zur Überwachung der Montage beide Linie um sicherzustellen, dass die Elfen einen guten Job machen und weil Bilder Fließband schön aussehen auf Werbeplakate [citation benötigte]
Leider ist seine Kamera kaputt gegangen, und er möchte, dass Sie eine Simulation des Fließbands erstellen!
Alle vorhandenen Kartons haben die gleiche Breite, damit sie perfekt auf das Förderband passen, damit das Fließband mit maximaler Effizienz weiterarbeitet und das Risiko von Fehlern oder Ausfällen verringert wird.
Herausforderung
Geben Sie eine Liste der Geschenke aus, die durch ihre Abmessungen dargestellt werden, und geben Sie ein Förderband mit allen Geschenken aus.
Ein Geschenk ist wie folgt gezeichnet:
+----+
/ /|
+----+ |
| | +
| |/
+----+
Dieses Geschenk hat die Breite 1, die Höhe 2 und die Länge 4. Beachten Sie, dass die Pluszeichen nicht für die Seitenlänge zählen, sodass ein Geschenk mit der Länge 4 tatsächlich 6 Positionen umfasst.
Alle Geschenke werden nebeneinander mit einem Leerzeichen zwischen den nächsten beiden Zeichen gezeichnet. Das heißt, die linken unteren Ecken der Geschenke sind so voneinander beabstandet, dass, wenn ein Geschenkkarton Länge l
und Breite hat w
, die linke untere Ecke des nächsten Geschenkkartons genau l + w + 4
rechts von der linken unteren Ecke des vorherigen Kartons liegt.
Nachdem alle vorhandenen Kartons gezeichnet wurden, wird das Förderband gezeichnet, indem der Abstand zwischen den Kartons in jeder der letzten width + 2
Zeilen durch Unterstriche ersetzt wird.
Die endgültige Ausgabe für Geschenkboxen mit (l, w, h)
von [(4, 1, 2), (8, 1, 3), (1, 1, 1)]
wäre:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
Formatierungsspezifikationen
Sie können entweder eine Liste mit 3 Tupeln erstellen, wobei eines der Elemente über die gesamte Liste hinweg konsistent ist (das wäre die Breite), oder Sie nehmen die aktuelle Breite und dann eine Liste mit 2 Tupeln, die die Länge und repräsentieren Höhe jedes Geschenks. Sie können die Eingaben in beliebiger Reihenfolge und in einem angemessenen Format vornehmen. Die Geschenke müssen jedoch in der Reihenfolge angezeigt werden, in der sie als Eingabe angegeben wurden.
Sie können jedes vernünftige Ausgabeformat für die ASCII-Grafik auswählen (einschließlich der Rückkehr von einer Funktion).
Testfälle
Diese Testfälle werden als [(l, w, h), ...]
Format angegeben.
[(4, 1, 2), (8, 1, 3), (1, 1, 1)]:
+--------+
+----+ / /|
/ /| +--------+ | +-+
+----+ | | | | / /|
| | +_| | +_+-+ +
| |/__| |/__| |/
+----+___+--------+___+-+
[(5, 3, 4), (8, 3, 1), (1, 3, 7)]:
+-+
/ /|
/ / |
+-----+ / / |
/ /| +-+ |
/ / | | | |
/ / | +--------+ | | |
+-----+ | / /| | | |
| | +___/ / +_| | +
| | /___/ / /__| | /
| | /___+--------+ /___| | /
| |/____| |/____| |/
+-----+_____+--------+_____+-+
[(0, 0, 0)] (this is the most interesting test case ever :P)
++
+++
++
[(8, 3, 0), (0, 3, 8)] (more zero cases)
++
//|
// |
// |
++ |
|| |
|| |
|| |
+--------+ || |
/ /+_|| +
/ //__|| /
/ //___|| /
+--------+/____||/
+--------+_____++
Regeln
- Es gelten Standardlücken
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes
- Es wird keine Antwort akzeptiert
Hinweis: Ich habe mich für diese Herausforderungsserie von Advent Of Code inspirieren lassen . Ich habe keine Zugehörigkeit zu dieser Site
Eine Liste aller Herausforderungen in der Serie finden Sie im Abschnitt "Verknüpft" der ersten Herausforderung hier .
Antworten:
Kohle ,
9681 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Eingabe ist die Breite in der ersten Zeile, dann die anderen Dimensionen in den folgenden Zeilen, die mit einer Leerzeile enden. Erläuterung:
Geben Sie die Breite ein.
Die verbleibenden Zeilen durchlaufen, bis die leere Zeile erreicht ist.
Ziehe den Gürtel zwischen den Geschenken. Die
u
Variable ist für eine leere Liste vordefiniert, die daher beim ersten Durchlauf nichts unternimmt, während sie später ein einzelnes Element enthält, wodurch dieser Code einmal ausgeführt wird. (Mit einemif
wäre weniger Golf.)Teilen Sie die Dimensionen im Raum auf, wandeln Sie sie in eine Ganzzahl um und speichern Sie sie in
u
.Entfernen Sie die letzte Abmessung und speichern Sie sie in
p
.Kopieren Sie die erste Bemaßung nach
r
, lassen Sie sie jedochu
so, dass der Gürtel in der nächsten Schleife gezogen wird.Löschen Sie das Innere der Gegenwart, falls der Gürtel es überlappt.
Zeichnen Sie die inneren Linien der Gegenwart.
Zeichnen Sie halb um das Äußere der Gegenwart herum und wiederholen Sie dies für die andere Hälfte.
quelle
Pip ,
160 bis154 Bytes153 Byte Code, +1 für
-l
Flag.Dies ist eine Funktion, die eine Liste von Listen enthält
[width height length]
. Probieren Sie es online!Wie?
Erklärung auf oberster Ebene:
Hinterlasse einen Kommentar und ich werde eine detailliertere Erklärung hinzufügen.
quelle
Python 2 , 508 Bytes
Probieren Sie es online!
Nimmt eine Liste von Listen von
[height, width, length]
quelle