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.