Es wurden automatische Nanobots für den Hausbau hergestellt, und es ist Ihre Aufgabe, sie zu codieren.
Hier ist das Haus durch Eingabe erstellt 7 4 2
/-----/|
/ / |
|-----| |
| | |
| | /
|_____|/
Die Eingabe ist eine Zeichenfolge, die die Abmessungen des Hauses enthält.
7
ist die Breite.
|_____|
---7---
4
ist die Höhe.
|
|
|
|
2
ist die Tiefe
/
/
Können Sie anhand dieser Eingabe das Haus erstellen?
Ihr Code muss so klein wie möglich sein, damit er in die Roboter passt.
Anmerkungen
Die kleinsten Maße, die Sie als Eingabe erhalten, sind 3 2 2
. Ihr Programm kann alles mit Dimensionen ausführen, die kleiner als sind 3 2 2
.
Testfälle
3 2 10
/-/|
/ / |
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
|-| /
|_|/
3 2 10
?Antworten:
Python 2, 128 Bytes
Druckt Zeile für Zeile. Die Zeilenindizes
i
zählen vond
bis abwärts-h+1
.quelle
' '*min(d-i,h-1,w+1,h-1+i)
mit(' '*d)[max(0,i):h-1+i]
Rubin, 145 Bytes
Gibt eine Liste von Zeichenfolgen zurück. Jedes Element in der Liste entspricht einer Zeile. Wenn eine mehrzeilige Zeichenfolge zurückgegeben werden muss, fügen Sie 3 Bytes
*$/
unmittelbar vor der letzten Klammer hinzu.quelle
JavaScript (ES6), 169 Byte
Wobei
\n
ein buchstäbliches Newline-Zeichen darstellt. Erläuterung:Bearbeiten: 2 Bytes dank @jrich gespeichert.
quelle
,r='repeat'
von der Vorderseite zu entfernen, und ersetzen Sie die erste[r]
mit[r='repeat']
,r=(n,c=` `)=>c.repeat(n)
und als ich den Spieß gewechselt habe habe ich die Möglichkeit für die Umlagerung übersehen.Python
224301297 Bytes(Funktioniert jetzt für alle Boxen einschließlich 1x1x1)
Erläuterung:
Nimmt drei Konstanten auf: l (Länge), h (Höhe), w (Breite).
Wenn wir uns ein paar Musterboxen ansehen, können wir Muster im Abstand finden.
Für ein 3 x 4 x 3-Kästchen verwenden wir Zahlen, um den Abstand zwischen Abschnitten darzustellen.
Die oberste Zeile hat 4 Leerzeichen oder w + 1. Die nächsten drei Zeilen haben w - (1 * x). X ist die Linie.
Dies sind Muster, die in allen Zeilen in allen Feldern fortgesetzt werden. Daher können wir diese Zeile einfach zeilenweise programmieren, indem wir die Anzahl der Leerzeichen multiplizieren, um sie dem Muster anzupassen.
Hier ist ein Beispiel für eine 5 x 5 x 2 Box.
quelle
w,h,l=input()
oder als Funktion festlegen.Python 3.5,
328326313305295248 Bytes( Danke an Kevin Lau für den Tipp zur Reduzierung der ternären Anweisungen! )
Nimmt die Eingabe als 3 Ganzzahlen in der Reihenfolge von
width, height, depth
. Wird mit der Zeit mehr Golf spielen, wo immer ich kann.Probieren Sie es online! (Ideone)
Erläuterung:
Für die Zwecke dieser Erklärung wird angenommen, dass die Funktion mit den Argumenten ausgeführt wurde, bei
(3,2,3)
denen 3 die Breite (w
), 2 die Höhe (h
) und 3 die Tiefe (d
) ist. Lassen Sie mich dennoch zunächst den Hauptteil der gesamten Funktion zeigen:Hier werden die beiden Listen, aus denen das gesamte "Haus" besteht, erstellt und dann durch wörtliche neue Zeilen (
\n
) miteinander verbunden. Nennen wir sie Listea
bzw. Listeb
und analysieren sie:Hier wird die Liste
a
erstellt:Diese Liste enthält die ersten
d
Zeilen des Hauses. Hieri
ist jede Zahl in dem Bereich,0=>(d-(d-h))+d-h
in dem sied-h=0
negativ oder null ist. Zu Beginnd-i
werden der Liste Leerzeichen hinzugefügt, gefolgt von einem/
und dem von einer komprimierten bedingten Anweisung zurückgegebenen. In dieser bedingten Anweisung wird diew-2
Anzahl der Leerzeichen zurückgegeben, wenni>1
. Andernfalls wird die gleiche Anzahl-
zurückgegeben. Danach folgen ein weiteres/
und dann Leerzeichen, wobei die Anzahl der Leerzeichen jetzt davon abhängt, ob oder nichti<=d-(d-h)-1
. Wenn dies der Fall ist, werdeni
Leerzeichen hinzugefügt. Andernfalls werdenh-1
Leerzeichen hinzugefügt. Zum Schluss wird dies alles durch a/
oder a abgerundet|
, wobei|
if hinzugefügt wirdi<=d-(d-h)-1
, andernfalls a/
hinzugefügt. In diesem Fall eines3x2x3
Prismas würde dies als Liste zurückgegebena
:Hier wird die Liste
b
erstellt:Diese Liste enthält die restlichen Linien des Prismas. In dieser Liste
i
ist jede ganze Zahl in dem Bereich ,(h-(h-d))+h-d=>0
wo ,h-d=0
wenn negativ oder Null. Um diese Liste zu beginnen, wird zunächst ein a|
hinzugefügt, da diese Zeilen immer mit einem beginnen|
. Dann wird entweder ein Raum,-
oder_
hinzugefügt werden abhängig davon , ob oder nichti=h
oderi<2
. Wenn jai<2
, dann_
wird a hinzugefügt. Andernfalls wird a-
hinzugefügt, wenni=h
, oder ein Leerzeichen wird hinzugefügt, wenni>h
oderi<h
oderi>2
. Nachdem diese Entscheidung getroffen wurde, wird diew-2
Nummer des gewählten Zeichens hinzugefügt. Danach wird eine weitere|
hinzugefügt, und dann wird entweder einei-1
oder eined
Anzahl von Leerzeichen hinzugefügt. Wenn jai>h-(h-d)
, dann ad
Anzahl der Leerzeichen wird hinzugefügt. Andernfalls wird diei-1
Anzahl der Leerzeichen hinzugefügt. Zum Schluss wird dies alles mit a|
oder a ergänzt/
, wobei a|
ifi>h-(h-d)
oder a/
if hinzugefügt wirdi<=h-(h-d)
. Im Fall eines3x2x3
Prismas gibt listb
Folgendes zurück:Nachdem die 2 Listen erstellt wurden, werden sie mit literal new lines (
\n
) verbunden'\n'.join()
. Dies ist Ihr fertiges Prisma, und in diesem Fall würde es so aussehen:quelle
'-_'[f<2]
. SchließlichR=range;S,V,L=' |/'
funktioniert die Zuweisung Ihrer anfänglichen Variablen, da sich Strings in dieser Situation gerne für Sie entpacken.a=1 if b<9 else c=5
kann nicht ausgedrückt werden ,[a=1,c=5][b<9]
weil Sie beide Modifizierung am Ende danna
undc
. Hier ist die Seite mit den PPCG Python-Golftipps: codegolf.stackexchange.com/questions/54/…'_'if f<2else' -'[f==h]
. Denken Sie daran, dass Boolesche Werte als Ganzzahlen ausgewertet werden, sodass Sie diese Dreiergruppe mit der anderen "verketten" können, die Sie erhalten möchten[' -'[f==h],'_'][f<2]
. Außerdem hast du meinen TippS,V,L=' |/'
noch nicht benutzt .