Это окно:
---
| |
---
Давайте добавим несколько стен |
. Поместите два пробела с каждой стороны, чтобы в окне было достаточно места.
| --- |
| | | |
| --- |
Теперь давайте добавим крышу и потолок. Чтобы держать окно в середине комнаты, давайте добавим еще один ряд над ним и под ним.
---------
| |
| --- |
| | | |
| --- |
| |
---------
Теперь просто добавьте крышу. Поместите косую черту как можно левее, а обратную косую черту как можно правее, и мы получим следующее:
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Затем передвиньте косую черту вверх и вправо. Переместите обратную косую черту на одну и левую:
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
Повторяйте, пока две косые черты не встретятся, затем добавьте звездочку, где они встречаются:
*
/ \
/ \
/ \
/ \
---------
| |
| --- |
| | | |
| --- |
| |
---------
И вы сделали! Это дом 1х1. дом 2х2 будет выглядеть так:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-----------------
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
|-------|-------|
| | |
| --- | --- |
| | | | | | |
| --- | --- |
| | |
-----------------
и дом 3х2:
*
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
/ \
-------------------------
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
|-------|-------|-------|
| | | |
| --- | --- | --- |
| | | | | | | | | |
| --- | --- | --- |
| | | |
-------------------------
Соревнование
Вы должны написать полную программу, которая принимает два целых числа, x и y, и печатает дом, который имеет ширину X комнат и высоту Y комнат. Ваша программа должна быть в состоянии обрабатывать дома до 10х10. IO может быть в любом разумном формате. Допускаются завершающие пробелы в каждой строке и один завершающий перевод строки.
Кратчайший ответ в байтах побеждает.
f'{name}'
форматирование строки?Python 2,
190181 байтУверен, в гольфе есть многое, особенно в окнах, но сейчас есть кое-что. Ширина ввода и высота через запятую, например
1,2
.Быстрое и грубое объяснение:
источник
JavaScript (ES6),
292270238215200 байтСпасибо @Neil за помощь в сокращении этого!
Звоните как:
F(a)(b)
Строит крышу, затем собирает основной дом с помощью слоистых струнных повторов.
источник
join`|\n`
и теперь я хотел бы прокомментировать. Это было бы хорошим оправданием, чтобы добавить к моему частичному комментарию, предлагающему использовать9*a
в какой-то момент, который я никогда не отправлял, потому что он был слишком коротким.4*a-1
выглядит неправильно, я думаю, что это должно быть4*a
, это может сэкономить вам 4 байта.m-i-1
становится--m
.9*a-a
становится8*a
.*\n${[...Array(m)].map(...).join
\ n}\n
``, но вы можете пойти на один лучше и присоединиться к строке до и после одновременно:a=>b=>(p=(c,d=' ')=>d.repeat(c),[p(m=4*a)+`*`,...[...Array(m)].map((c,i)=>p(--m)+'/'+p(i*2+1)+'\\'),y=p(8*a+1,'-')].join`\n`+p(b,`\n`+[x=p(a,'| '),w=p(a,'| --- '),p(a,'| | | '),w,x,y].join`|\n`))
`/${p(i*2+1)}\\`
.C ++, 282 байта, исправляет проблемы с предыдущей записью:
Выход:
источник
Ruby, Rev B 165 байт
использует одну петлю и несколько других трюков в гольф.
Ruby, Rev A 179 байт
Ungolfed
источник
| \-'
.\-
ничего не означает как escape-последовательность, поэтому\-
она просто анализируется как 2 символа. Тогда, конечно, это-
имеет особое значениеtr
, поэтому нам нужна строка' \-'
для окон, чтобы экранировать-
(отображение C-> пробел, B->-
и A->, так-
как больше не осталось символов.) Для этажей у нас есть только строка'-'
и в этом случаеtr
кажется счастливым интерпретировать ее как буквальный, а не как специальный символ, назначая C = B = A ='-'
В общем, работать было сложно. Я уверен, что есть еще игра в гольф, отредактирую позже.C ++, тест 258 байтов здесь
Результат:
источник
-
. Промежуточные этажи разбиты|
C #,
361353 байтаПолная программа:
источник
s=""
их можно поместить в цикл for (j) (рассмотримj-->0
также на условие, иi++<h
в последний цикл),i=0
может быть перемещен из цикла for в объявление, сохраняющее байт. Вы также можете сохранить байт, повторно используя назначенные пустые строки (послеm
назначения вы можете назначитьo=m
сохранение""
. Replace также принимает строки, поэтому вы можете используйтеq
вместо него' '
, и после>
объявления не будет места послеr
. Маленькие вещи;)VBA, 284 байта
Функция Replace - это отличный инструмент для создания нескольких копий способом, который, к сожалению, не нужен функции String.
Вызовите лучший эффект в окне Immediate редактора VBA:
?H(8,8)
например.источник