绘制任意大小的平铺立方体


12

用ASCII艺术画一个任意大小的平铺立方体。

您将得到三个数字abc,程序将输出一个a * b * c大小的立方体。

例子

3 3 3 ->

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

5 2 3 ->

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

4 6 5 ->

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

最短的代码获胜。


我认为如果将右下角的部分/改为|顶部,则它看起来会稍微好一点,因此它与顶部匹配,并且每条垂直线中的管道数相同。
mellamokb

此外,什么是有效范围abc?例如,是否允许任何尺寸0
mellamokb

@stevether:我没想到“平铺立方体”,这是一个更好的名字。
beary605

4
立方体具有相等的边。最好将其称为平铺的平行六面体或砖头。
DavidC 2012年

5
@ beary605我不是数学家,但我想您可能是指矩形的长方体。(en.wikipedia.org/wiki/Cuboid)立方体,一种特殊的矩形长方体,具有正方形的面。(en.wikipedia.org/wiki/Cube)据我所知,平铺对象时,对象形状的名称不会改变。
DavidC 2012年

Answers:


10

Python,145个字符

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

我们可以看到打印输出的图片吗?
DavidC 2012年

@DavidCarraher:完成了。
基思·兰德尔

4

数学148 143 139个字符

我决定使用透明的玻璃砖。

下面的代码以长方体,边缘为a,b和c的形式打印ASCII字符“-”。下图中唯一看到的是连字符。

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]

在此处输入图片说明


那不是ascii ...好主意,但是没有。
2012年

1
我承认这很厚脸皮。感谢您的反馈。
DavidC 2012年

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)

它已经被击败了,但是想法可以帮助别人。


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

与其他语言相比,得分再一次很差-因此,任何C高尔夫大师都可以提高?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.