Вызов
Это простая задача. Дайте два натуральных числа w
и h
создайте забор ASCII с шириной w
и высотой h
. Забор должен быть построен по следующим правилам:
+
Персонаж будет представлять собой пост.- Символ
-
будет использоваться для обозначения ширины забора. |
Будет использоваться для обозначения высоты забора.- После того, как ровно три
-
символа были выведены,+
символ должен быть выведен позже. За исключением четырех углов, любое другое значение, которое вы выведите+
, будет недействительным. Вы можете следовать этому правилу, начиная слева или справа (см. Примеры), но вы должны быть последовательны. - После того, как ровно два
|
символа были выведены,+
символ должен быть выведен позже. За исключением четырех углов, любое другое значение, которое вы выведите+
, будет недействительным. Вам разрешено следовать этому правилу, начиная сверху или снизу (см. Примеры), но вы должны быть последовательными. - Каждый забор будет иметь ровно четыре угла, и каждый угол будет обозначен символом
+
.
Другими словами: через каждые три -
символа вы должны вывести a +
. И через каждые два |
символа вы должны вывести a +
.
Можно предположить, что забор всегда будет прямоугольником и что оба w
и h
никогда не будут больше 100
или меньше чем 1
. Конечный и / или предшествующий пробел разрешен.
Примеры / Тестовые случаи
w = 1
h = 1
+-+
| |
+-+
w = 3
h = 2
+---+
| |
| |
+---+
w = 5
h = 7
+---+--+ or +--+---+
| | | |
| | + +
+ + | |
| | | |
| | + +
+ + | |
| | | |
| | + +
+ + | |
| | | |
+---+--+ +--+---+
w = 10
h = 5
+---+---+---+-+ or +-+---+---+---+
| | | |
| | + +
+ + | |
| | | |
| | + +
+ + | |
| | | |
+---+---+---+-+ +-+---+---+---+
w = 4
h = 4
+---+-+ or +-+---+
| | | |
| | | |
+ + + +
| | | |
| | | |
+---+-+ +-+---+
правила
- Применяются стандартные лазейки .
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах!
+
трогательных?+-+-+-+-+-+
недействительно. Извините за путаницу.Ответы:
C, 131 байт
Попробуйте онлайн!
Объяснение:
источник
Python 3 ,
140137128119106105 байтПопробуйте онлайн!
источник
in
и[w+1+(w-1)//3]]
в последней части.'\n') for
. Кроме того, вы можете изменить(w-1)
на~-w
который позволяет убрать скобки, поскольку унарные операторы имеют более высокий приоритет, чем двоичные. То же самое для(h-1)
->~-h
и(a-1)
->~-a
. Попробуйте онлайн - 128 байтdef f(w,h)
имеют одинаковую длинуlambda w,h
, но позволяют вам использовать несколько строк, если это поможет вам в дальнейшемa=~-w//3-~w;
сохранить 1 байтMathematica, 165 байт
источник
Пип , 38 байт
37 байт кода, +1 за
-n
флаг.Принимает ширину и высоту в качестве аргументов командной строки. Попробуйте онлайн!
объяснение
источник
Древесный уголь,
474540 байтОбъяснение: Работы по разработке каждой стороны
-
s /|
s , в свою очередь, вставляя+
s , где это необходимо, а затем отделка с+
. После рисования верхней и правой сторон, отскакивает назад к началу, чтобы нарисовать их в обратном порядке, эффективно рисуя левую и нижнюю стороны. Я не знаю, разрешена ли вращательная симметрия, но если это так, то для2725 байтов:Приводит вышеуказанную идею в крайнее положение, рисуя верхнюю сторону, поворачивая влево, рисуя правую сторону, снова вращая, а затем повторяя, чтобы нарисовать нижнюю и левую стороны в обратном порядке.
источник
JavaScript (ES6),
133132 байтаПринимает ввод в синтаксисе Карринг:
f(width)(height)
.Тестовый фрагмент
источник
Pyth , 40 байт
Тестовый пакет .
источник
Java (OpenJDK 8) ,
178177 байтПопробуйте онлайн!
-1 байт благодаря @KevinCruijssen
источник
w->h->
попробуйте здесь.Древесный уголь ,
47 4537 байтПопробуйте онлайн!
Другой подход от @ Нила : первый я создаю строки
α
иβ
содержащие символы в горизонтальных и вертикальных границах, с помощьюRange
оператора , который создает повторение строки до заданной длина не будет достигнут. Затем я печатаю их в правильном порядке:Ссылка на подробную версию .
источник
Range
, что при втором подходе экономится 3 байта!A…+---÷⁺²×⁴N³αA…+||÷⁺¹×³N²βPα↓βα+↖↑⮌β
.05AB1E , 58 байт
Попробуйте онлайн!
Тяжелее в 05AB1E, чем я думал.
источник