Narysuj kafelkowy sześcian o dowolnym rozmiarze

12

Narysuj kafelkowy sześcian o dowolnym rozmiarze, w sztuce ASCII.

Otrzymasz trzy cyfry a, ba cprogram powinien wypisać kostkę wielkości a * b * c.

Przykłady

3 3 3 ->

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

5 2 3 ->

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

4 6 5 ->

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

Najkrótszy kod wygrywa.

beary605
źródło
Myślę, że wyglądałoby to nieco lepiej, gdyby /zamiast tego prawy dolny element |pasował do góry, a liczba rur w każdej linii pionowej była identyczna.
mellamokb
Również, jakie są poprawne zakresy a, bi c? Na przykład, czy dozwolony może być dowolny z wymiarów 0?
mellamokb
@stevether: Nie myślałem o „kafelkowej kostce”, to lepsza nazwa.
beary605
4
Sześcian ma równe krawędzie. Lepiej nazwać to kafelkami równoległościanu lub cegły.
DavidC
5
@ beary605 Nie jestem matematykiem, ale myślę, że masz na myśli prostokątny prostopadłościan. ( en.wikipedia.org/wiki/Cuboid ) Sześcian, szczególny typ prostokątnego prostopadłościanu, ma kwadratowe ściany. ( en.wikipedia.org/wiki/Cube ) O ile mi wiadomo, nazwa kształtu obiektu nie zmienia się, gdy obiekt jest sąsiadująco.
DavidC

Odpowiedzi:

10

Python, 145 znaków

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
źródło
Czy możemy zobaczyć zdjęcie wydruku?
DavidC
@DavidCarraher: gotowe.
Keith Randall,
4

Mathematica 148 143 139 znaków

Zdecydowałem się zastosować przezroczyste szklane płytki.

Poniższy kod drukuje znaki ASCII „-” w postaci prostopadłościanu z krawędziami, a, b i c. Jedyne, co widać na poniższym rysunku, to łączniki.

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]

wprowadź opis zdjęcia tutaj

DavidC
źródło
To nie ascii ... fajny pomysł, ale nie.
stoisko
1
To było z mojej strony bezczelne. Dziękuję za opinię.
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)

Jest już pobity, ale pomysł mógłby pomóc komuś innemu.

Rodzaj Ev
źródło
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;}}

Po raz kolejny słaby wynik w porównaniu z innymi językami - więc czy guru golfa z C potrafią poprawić?

króliczek
źródło