Намалюйте кахельний кубик будь-якого розміру


12

Намалюйте кахельний куб будь-якого розміру в арт. ASCII.

Вам дадуть три числа a, bі c, і програма повинна вивести куб розміром * b * c.

Приклади

3 3 3 ->

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

5 2 3 ->

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

4 6 5 ->

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

Найкоротший код виграє.


Я думаю, це виглядало б трохи краще, якби правий нижній шматок був /замість цього, |щоб він відповідав верху, а кількість труб у кожній вертикальній лінії була б однаковою.
mellamokb

Крім того , якими є допустимі діапазони a, bі c? Наприклад, чи дозволяється будь-який з розмірів 0?
mellamokb

@stevether: Я не думав про "кахельний куб", це краще ім'я.
beary605

4
Кубик має рівні краї. Краще назвати це кахельним паралелепіпедом або цеглою.
DavidC

5
@ beary605 Я не математик, але, думаю, ви можете мати на увазі прямокутну кубоїд. ( en.wikipedia.org/wiki/Cuboid ) Куб, особливий тип прямокутної кубоїди, має квадратні грані. ( en.wikipedia.org/wiki/Cube ) Наскільки мені відомо, назва форми об’єкта не змінюється, коли об’єкт викладений кахлем.
DavidC

Відповіді:


10

Пітон, 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: зроблено.
Кіт Рендалл

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

С, 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 змогли покращити?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.