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.


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
    ____ ____ ____ ____ ____
  /____/____/____/____/____/|
 /____/____/____/____/____/||
/____/____/____/____/____/|||
|____|____|____|____|____||||
|____|____|____|____|____||||
|____|____|____|____|____||||
|____|____|____|____|____|||/
|____|____|____|____|____||/
|____|____|____|____|____|/

¿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í


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.