Dibuja un cubo de azulejos de cualquier tamaño.

12

Dibuje un cubo de mosaico de cualquier tamaño, en el arte ASCII.

Se le darán tres números a, by c, y el programa debería generar un cubo de tamaño a * b * c.

Ejemplos

3 3 3 ->

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

5 2 3 ->

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

4 6 5 ->

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

El código más corto gana.

beary605
fuente
Creo que se vería un poco mejor si la pieza inferior derecha fuera en /lugar de |coincidir con la superior, y el número de tuberías en cada línea vertical sea idéntico.
mellamokb
Además, ¿cuáles son los rangos válidos para a, by c? Por ejemplo, ¿se permite que alguna de las dimensiones sea 0?
mellamokb
@stevether: No pensé en "cubo de mosaico", ese es un mejor nombre.
beary605
44
Un cubo tiene bordes iguales. Es mejor llamarlo un paralelepípedo de azulejos o ladrillo.
DavidC
55
@ beary605 No soy matemático, pero creo que te estás refiriendo a un cuboide rectangular. ( en.wikipedia.org/wiki/Cuboid ) Un cubo, un tipo particular de cuboide rectangular, tiene caras cuadradas. ( en.wikipedia.org/wiki/Cube ) Hasta donde yo sé, el nombre de la forma del objeto no cambia cuando el objeto está en mosaico.
DavidC

Respuestas:

10

Python, 145 caracteres

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
fuente
¿Podríamos ver una foto de la impresión?
DavidC
@DavidCarraher: hecho.
Keith Randall
4

Mathematica 148 143 139 caracteres

Decidí usar baldosas de vidrio transparente.

El siguiente código imprime caracteres ASCII "-" en forma de cuboide con bordes, a, by c. Lo único que ves en la figura a continuación son guiones.

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]

ingrese la descripción de la imagen aquí

DavidC
fuente
Eso no es ascii ... idea genial, pero no.
Boothby
1
Fue ciertamente descarado de mi parte. Gracias por la respuesta.
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)

Ya está vencido, pero la idea podría ayudar a alguien más.

Ev_genus
fuente
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;}}

Una vez más, una puntuación baja en comparación con otros langs, por lo que cualquier gurú de golf C puede mejorar.

conejo bebé
fuente