Dessinez un cube carrelé de n'importe quelle taille

12

Dessinez un cube en mosaïque de n'importe quelle taille, dans l'art ASCII.

Vous recevrez trois nombres a, bet cle programme devrait sortir un cube de taille a * b * c.

Exemples

3 3 3 ->

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

5 2 3 ->

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

4 6 5 ->

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

Le code le plus court gagne.

beary605
la source
Je pense que cela aurait l'air un peu mieux si la pièce en bas à droite était /au lieu de |correspondre au haut et que le nombre de tuyaux dans chaque ligne verticale soit identique.
mellamokb
, Ce sont aussi les plages valides pour a, bet c? Par exemple, certaines dimensions peuvent-elles être 0?
mellamokb
@stevether: Je n'ai pas pensé à "cube en mosaïque", c'est un meilleur nom.
beary605
4
Un cube a des bords égaux. Mieux vaut l'appeler un parallélépipède carrelé ou une brique.
DavidC
5
@ beary605 Je ne suis pas mathématicien, mais je pense que vous faites peut-être référence à un cuboïde rectangulaire. ( en.wikipedia.org/wiki/Cuboid ) Un cube, un type particulier de cuboïde rectangulaire, a des faces carrées. ( en.wikipedia.org/wiki/Cube ) Pour autant que je sache, le nom de la forme de l'objet ne change pas lorsque l'objet est en mosaïque.
DavidC

Réponses:

10

Python, 145 caractères

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
la source
Pourrions-nous voir une photo de l'impression?
DavidC
@DavidCarraher: terminé.
Keith Randall
4

Mathematica 148 143 139 139 caractères

J'ai décidé d'utiliser des carreaux de verre transparents.

Le code suivant imprime les caractères ASCII "-" sous la forme d'un cuboïde avec des bords, a, b et c. La seule chose que vous voyez dans la figure ci-dessous sont des tirets.

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]

entrez la description de l'image ici

DavidC
la source
Ce n'est pas ascii ... bonne idée, mais non.
stand
1
Il était certes impertinent de ma part. Merci pour les commentaires.
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)

C'est déjà battu, mais l'idée pourrait aider quelqu'un d'autre.

Ev_genus
la source
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;}}

Encore une fois un score médiocre par rapport aux autres langues - donc tous les gourous du golf C peuvent-ils s'améliorer?

bébé-lapin
la source