Zeichne einen gekachelten Würfel von beliebiger Größe


12

Zeichnen Sie einen gekachelten Würfel beliebiger Größe in ASCII-Grafik.

Sie werden drei Zahlen gegeben werden a, bund c, und das Programm ausgeben soll eine a * b * c große Würfel.

Beispiele

3 3 3 ->

    ____ ____ ____
  /____/____/____/|
 /____/____/____/||
/____/____/____/|||
|____|____|____|||/
|____|____|____||/
|____|____|____|/

5 2 3 ->

    ____ ____ ____ ____ ____
  /____/____/____/____/____/|
 /____/____/____/____/____/||
/____/____/____/____/____/||/
|____|____|____|____|____||/
|____|____|____|____|____|/

4 6 5 ->

      ____ ____ ____ ____ 
    /____/____/____/____/|
   /____/____/____/____/||
  /____/____/____/____/|||
 /____/____/____/____/||||
/____/____/____/____/|||||
|____|____|____|____||||||
|____|____|____|____|||||/
|____|____|____|____||||/
|____|____|____|____|||/
|____|____|____|____||/
|____|____|____|____|/

Kürzester Code gewinnt.


Ich denke, es würde ein bisschen besser aussehen, wenn das untere rechte Stück /stattdessen |mit dem oberen übereinstimmt und die Anzahl der Rohre in jeder vertikalen Linie identisch wäre.
Mellamokb

Auch, was sind die gültigen Bereiche für a, bund c? Darf zum Beispiel eine der Dimensionen sein 0?
Mellamokb

@stevether: Ich habe nicht über "Tiled Cube" nachgedacht, das ist ein besserer Name.
beary605

4
Ein Würfel hat gleiche Kanten. Nennen wir es besser ein gekacheltes Parallelepiped oder einen Ziegelstein.
DavidC

5
@ beary605 Ich bin kein Mathematiker, aber ich denke, Sie beziehen sich möglicherweise auf einen rechteckigen Quader. ( en.wikipedia.org/wiki/Cuboid ) Ein Würfel, ein bestimmter Typ eines rechteckigen Quaders, hat quadratische Flächen. ( en.wikipedia.org/wiki/Cube ) Soweit ich weiß, ändert sich der Name der Form des Objekts nicht, wenn das Objekt gekachelt wird.
DavidC

Antworten:


10

Python, 145 Zeichen

a,b,c=map(int,raw_input().split())
for i in range(b+c+1):print(' '*(c-i)+((' /|'[(i>c)+(i>0)]+'_'*4)*(a+1))[:-4]+('|'*(b+c-i))[:b]+'/')[:5*a+c+1]

$ echo "5 6 3" | ./cube.py
    ____ ____ ____ ____ ____
  /____/____/____/____/____/|
 /____/____/____/____/____/||
/____/____/____/____/____/|||
|____|____|____|____|____||||
|____|____|____|____|____||||
|____|____|____|____|____||||
|____|____|____|____|____|||/
|____|____|____|____|____||/
|____|____|____|____|____|/

Könnten wir ein Bild des Ausdrucks sehen?
DavidC

@ DavidCarraher: fertig.
Keith Randall

4

Mathematica 148 143 139 Zeichen

Ich entschied mich für transparente Glasfliesen.

Der folgende Code druckt ASCII-Zeichen "-" in Form eines Quaders mit Kanten, a, b und c. Das einzige, was Sie in der folgenden Abbildung sehen, sind Bindestriche.

w_~e~_ := {Arrowheads@Table[{1, p/9, Graphics@Style[Text["-"], Red]}, {p, 9}], White,Arrow@w};
GridGraph[{a, b, c} + 1, VertexSize -> 0, EdgeShapeFunction -> e]

Bildbeschreibung hier eingeben


Das ist keine gute Idee, aber nein.
Stand vom

1
Es war zugegebenermaßen frech von meiner Seite. Danke für die Rückmeldung.
DavidC

0

Python3 (188)

a,b,c=map(int,input().split())
x=a+1
k="_"*4
p=print
l=5*a+c+1
p(" "*c+k.join(" "*x))
r=" "*c+k.join("/"*x)+"|"*b+"/"
exec("r=r[1:];p(r[:l]);"*c+'b-=1;p((k.join("|"*x)+"|"*b+"/")[:l]);'*b)

Es ist bereits geschlagen, aber die Idee könnte jemand anderem helfen.


0

C 226 , 212

s(x,y){x<1?:putchar(" |/_\n"[y],s(x-1,y));}i,j,x,y,z;main(){for(scanf("%d%d%d",&x,&y,&z);j<=y+z;s(i,1),s(j++>y,2),s(1,4)){s(z-j,0);for(i=x;s(1,j?j>z?1:2:0),i;i--)s(4,3);i=y+z-j;if(i>j)i=j;if(i>z)i=z;if(i>y)i=y;}}

Wieder eine schlechte Punktzahl im Vergleich zu anderen langs - also kann sich jeder C-Golf-Guru verbessern?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.