Автоматические домостроительные наноботы были изготовлены, и ваша работа - кодировать их.
Вот дом, созданный входом 7 4 2
/-----/|
/ / |
|-----| |
| | |
| | /
|_____|/
Вводом является строка, содержащая размеры дома.
7
это ширина.
|_____|
---7---
4
это высота.
|
|
|
|
2
это глубина
/
/
Учитывая этот вклад, вы можете создать дом?
Ваш код должен быть как можно меньше, чтобы он мог поместиться в роботах.
Примечания
Наименьшие размеры, которые вы получите в качестве входных данных 3 2 2
. Ваша программа может делать что угодно с размерами, которые меньше, чем 3 2 2
.
Testcases
3 2 10
/-/|
/ / |
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
/ / /
|-| /
|_|/
3 2 10
?Ответы:
Python 2, 128 байт
Печатает построчно. Индексы строк
i
отсчитываются отd
до-h+1
.источник
' '*min(d-i,h-1,w+1,h-1+i)
на(' '*d)[max(0,i):h-1+i]
Рубин, 145 байт
Возвращает список строк. Каждый элемент в списке соответствует строке. Если должна быть возвращена многострочная строка, добавьте 3 байта для добавления
*$/
непосредственно перед последней скобкой.источник
JavaScript (ES6), 169 байт
Где
\n
представляет буквальный символ новой строки. Объяснение:Изменить: Сохранено 2 байта благодаря @jrich.
источник
,r='repeat'
спереди и замените первое[r]
на[r='repeat']
,r=(n,c=` `)=>c.repeat(n)
и когда я сменил тактику, я упустил возможность перестановки.Python
224301297 байт(Теперь работает для всех коробок, включая 1x1x1)
Объяснение:
Принимает три константы: l (длина), h (высота), w (ширина).
Если мы посмотрим на пару ящиков с образцами, мы сможем найти шаблоны в интервале.
Для блока 3 x 4 x 3 мы будем использовать числа для представления расстояния между секциями.
В верхнем ряду 4 пробела или w + 1. Следующие три строки имеют w - (1 * x). Х является линией.
Это шаблоны, которые продолжаются по всем строкам во всех полях. Следовательно, мы можем легко запрограммировать эту строку построчно, умножив количество пробелов для соответствия шаблону.
Вот образец для коробки 5 x 5 x2.
источник
w,h,l=input()
либо сделать это функцией.Python 3.5,
328326313305295248 байт( Спасибо Кевину Лау за совет об уменьшении размера троичных операторов! )
Принимает ввод как 3 целых числа в порядке
width, height, depth
. Будет ли гольф больше со временем, где я могу.Попробуйте онлайн! (Ideone)
Объяснение:
В целях этого объяснения предположим, что функция была выполнена с аргументами,
(3,2,3)
где 3 - ширина (w
), 2 - высота (h
), а 3 - глубина (d
). При этом позвольте мне начать с показа основной части всей функции:Здесь два списка, которые составляют весь «дом», создаются, а затем объединяются буквально новыми строками (
\n
). Давайте назовем их lista
и listb
соответственно и проанализируем каждый из них:Вот где
a
создается список :Этот список содержит первые
d
строки дома. Здесьi
каждое число в диапазоне,0=>(d-(d-h))+d-h
где,d-h=0
если отрицательный или ноль. Для началаd-i
в список добавляются пробелы, после которых следует символ «а»,/
а затем все, что возвращается сжатым условным оператором. В этом условном выраженииw-2
число пробелов возвращается, еслиi>1
. В противном случае-
возвращается такое же количество . Затем за ними следуют другие/
, а затем пробелы, где количество пробелов теперь зависит от того, стоит или нетi<=d-(d-h)-1
. Если это так, тоi
пробелы добавляются. В противном случаеh-1
пробелы добавляются. Наконец, все это завершается либо a,/
либо a|
, где|
добавляется ifi<=d-(d-h)-1
, в противном случае a/
добавлен. В этом случае3x2x3
призмы это будет возвращено спискомa
:Вот где
b
создается список :Этот список содержит остальные линии призмы. В этом списке
i
находится каждое целое число в диапазоне,(h-(h-d))+h-d=>0
где,h-d=0
если отрицательный или ноль. Чтобы начать этот список, сначала|
добавляется a, так как эти строки всегда начинаются с a|
. Затем либо пробел,-
либо_
добавляется в зависимости от того, или нет,i=h
илиi<2
. Еслиi<2
, то_
добавляется. В противном случае,-
добавляется, еслиi=h
, или пробел добавляется, еслиi>h
илиi<h
илиi>2
. После принятия этого решенияw-2
добавляется номер выбранного персонажа. После этого|
добавляется еще один , а затем добавляется либо число,i-1
либоd
число пробелов. Еслиi>h-(h-d)
, тоd
количество пробелов добавляется. В противном случаеi-1
добавляется количество пробелов. Наконец, все это завершается либо a,|
либо a/
, в котором|
добавляется a ifi>h-(h-d)
или a/
добавляется ifi<=h-(h-d)
. В случае3x2x3
призмы списокb
возвращает:После того, как 2 списка были созданы, они, наконец, объединяются с помощью новых буквенных строк (
\n
) с помощью'\n'.join()
. Это ваша законченная призма, и в этом случае она будет выглядеть так:источник
'-_'[f<2]
. Наконец,R=range;S,V,L=' |/'
работает для назначения ваших начальных переменных, так как строки будут с радостью распаковать себя для вас в этой ситуации.a=1 if b<9 else c=5
не может быть выражено как,[a=1,c=5][b<9]
потому что вы в конечном итоге измените обаa
иc
. Вот страница советов по игре в гольф от PPCG Python: codegolf.stackexchange.com/questions/54/…'_'if f<2else' -'[f==h]
. Помните, что логические значения оцениваются как целые числа, так что вы можете «связать» эту троицу с другой, которую вы исправили, чтобы получить[' -'[f==h],'_'][f<2]
. Кроме того, вы еще не использовали мой советS,V,L=' |/'
.