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.

beary605
quelle
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
    ____ ____ ____ ____ ____
  /____/____/____/____/____/|
 /____/____/____/____/____/||
/____/____/____/____/____/|||
|____|____|____|____|____||||
|____|____|____|____|____||||
|____|____|____|____|____||||
|____|____|____|____|____|||/
|____|____|____|____|____||/
|____|____|____|____|____|/
Keith Randall
quelle
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

DavidC
quelle
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.

Ev_genus
quelle
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?

Baby-Kaninchen
quelle