Vẽ một hình khối lát gạch có kích thước bất kỳ


12

Vẽ một khối lập phương lát gạch có kích thước bất kỳ, trong nghệ thuật ASCII.

Bạn sẽ được cung cấp ba số a, bc, chương trình sẽ xuất ra một khối có kích thước * b * c.

Ví dụ

3 3 3 ->

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

5 2 3 ->

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

4 6 5 ->

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

Mã ngắn nhất sẽ thắng.


Tôi nghĩ rằng nó sẽ trông tốt hơn một chút nếu mảnh dưới cùng bên phải /thay |vì nó khớp với đỉnh và số lượng ống trong mỗi đường thẳng đứng giống hệt nhau.
mellamokb

Ngoài ra, phạm vi giá trị là gì a, bc? Ví dụ: có bất kỳ kích thước nào được phép 0không?
mellamokb

@stevether: Tôi đã không nghĩ về "khối lập phương", đó là một cái tên tốt hơn.
beary605

4
Một khối lập phương có các cạnh bằng nhau. Tốt hơn để gọi nó là một lát gạch song song hoặc gạch.
DavidC

5
@ beary605 Tôi không phải là nhà toán học, nhưng tôi nghĩ bạn có thể đang đề cập đến một hình khối hình chữ nhật. ( en.wikipedia.org/wiki/Cuboid ) Một khối lập phương, một loại hình khối đặc biệt hình chữ nhật, có mặt vuông. ( en.wikipedia.org/wiki/Cube ) Theo như tôi biết, tên hình dạng của vật thể không thay đổi khi đối tượng được lát gạch.
DavidC

Câu trả lời:


10

Python, 145 ký tự

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

Chúng ta có thể thấy một hình ảnh của bản in?
DavidC

@DavidCarraher: đã xong.
Keith Randall

4

Toán học 148 143 139 ký tự

Tôi quyết định sử dụng gạch thủy tinh trong suốt.

Đoạn mã sau in các ký tự ASCII "-" ở dạng hình khối có cạnh, a, b và c. Điều duy nhất bạn nhìn thấy trong hình dưới đây là dấu gạch nối.

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]

nhập mô tả hình ảnh ở đây


Đó không phải là ... ý tưởng tuyệt vời, nhưng không.
gian hàng

1
Nó đã được thừa nhận táo tợn về phía tôi. Cảm ơn vì bạn đã phản hồi.
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)

Nó đã bị đánh bại, nhưng ý tưởng có thể giúp đỡ người khác.


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

Một lần nữa điểm kém so với các lang khác - vậy bất kỳ chuyên gia golf C nào cũng có thể cải thiện?

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.