วาดลูกบาศก์แบบเรียงต่อกันทุกขนาด


12

วาดลูกบาศก์ขนาดใดก็ได้ใน ASCII art

คุณจะได้รับหมายเลขสามa, bและcและโปรแกรมที่ควรเอาท์พุท a * b * คก้อนขนาด

ตัวอย่าง

3 3 3 ->

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

5 2 3 ->

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

4 6 5 ->

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

รหัสที่สั้นที่สุดชนะ


ฉันคิดว่ามันจะดูดีขึ้นเล็กน้อยถ้าชิ้นส่วนล่างขวา/แทนที่จะ|ตรงกับด้านบนและจำนวนท่อในแต่ละเส้นแนวตั้งจะเท่ากัน
mellamokb

นอกจากนี้สิ่งที่เป็นช่วงที่ถูกต้องสำหรับa, bและc? ตัวอย่างเช่นมีส่วนใดของมิติที่ได้รับอนุญาต0หรือไม่
mellamokb

@ สตีเฟ่น: ฉันไม่ได้คิดเกี่ยวกับ "ก้อนกระเบื้อง" นั่นเป็นชื่อที่ดี
beary605

4
คิวบ์มีขอบเท่ากัน ดีกว่าที่จะเรียกมันว่าขนานกระเบื้องหรืออิฐ
DavidC

5
@ beary605 ฉันไม่ใช่นักคณิตศาสตร์ แต่ฉันคิดว่าคุณอาจหมายถึงลูกบาศก์สี่เหลี่ยม ( en.wikipedia.org/wiki/Cuboid ) คิวบ์ซึ่งเป็นประเภทสี่เหลี่ยมจัตุรัสรูปสี่เหลี่ยมชนิดหนึ่งโดยเฉพาะมีรูปสี่เหลี่ยมจัตุรัส ( en.wikipedia.org/wiki/Cube ) เท่าที่ฉันรู้ชื่อของรูปร่างของวัตถุจะไม่เปลี่ยนแปลงเมื่อวัตถุปูกระเบื้อง
DavidC

คำตอบ:


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

@DavidCarraher: เสร็จแล้ว
Keith Randall

4

Mathematica 148 143 139 ตัวอักษร

ฉันตัดสินใจใช้กระเบื้องแก้วโปร่งใส

รหัสต่อไปนี้พิมพ์อักขระ ASCII "-" ในรูปแบบของลูกบาศก์ที่มีขอบ, a, b และ c สิ่งเดียวที่คุณเห็นในภาพด้านล่างคือยัติภังค์

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 ... ไอเดียเจ๋ง ๆ แต่ไม่ใช่
บูธโดย

1
มันเป็นที่หน้าด้านยอมรับในส่วนของฉัน ขอบคุณสำหรับความคิดเห็น.
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)

มันถูกตีแล้ว แต่ความคิดสามารถช่วยคนอื่นได้


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 สามารถปรับปรุงอะไรได้บ้าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.