Используя два целых числа в качестве входных данных в массиве, нарисуйте прямоугольник, используя первое целое число как ширину, а второе как высоту.
Или, если ваш язык поддерживает это, два целых числа могут быть заданы как отдельные входные данные.
Предположим, ширина и высота никогда не будут меньше 3, и они всегда будут заданы.
Пример выходов:
[3, 3]
|-|
| |
|-|
[5, 8]
|---|
| |
| |
| |
| |
| |
| |
|---|
[10, 3]
|--------|
| |
|--------|
Это код-гольф, поэтому выигрывает ответ с наименьшим количеством байтов.
Ị
:)Matlab,
696556 байтСпасибо @WeeingIfFirst и @LuisMendo за несколько байтов =)
В Matlab это действительно просто: сначала создайте матрицу нужного размера, затем индексируйте первую и последнюю строки, чтобы вставить
-
, и сделайте то же самое с первым и последним столбцом для вставки|
.Например
f(4,3)
возвращаетисточник
z([1,b],1:a)=45;z(1:b,[1,a])=124;z=[z,'']
z(b,a)=' ';z([1,b],:)=45;z(:,[1,a])=124
z(b,a)=' '
как char. После этого вы можете заполнить номера, и они автоматически приводятся к символу.z
сохраняет свой первоначальный типJavaScript (ES6), 63 байта
источник
Haskell,
6255 байтовПример использования:
Вспомогательная функция
f
берет список из двух элементов[a,b]
и числоn
и возвращает список из одного,a
за которым следуетn-2
b
s, а затем одинa
. Мы можем использоватьf
трижды: для построения верхней / нижней строки:,f "|-" i
средней линии:f "| " i
и из этих двух целого прямоугольника:f [<top>,<middle>] j
(примечание:j
не отображается в качестве параметраg i
из-за частичного применения).Редактировать: @dianne сохранил несколько байтов, объединив два
Char
аргумента вString
длину 2. Большое спасибо!источник
#
идея!(a:b)#n=a:([3..n]>>b)++[a]
и написав["|-"#i,"| "#i]#j
Python 2,
6158 байт-3 байта благодаря @flornquake (удалите ненужные скобки; используйте в
h
качестве счетчика)Тестовые случаи в идеоне
источник
('- '[1<i<h])
не нуждается в скобках.exec"print'|'+'- '[1<h<%d]*(w-2)+'|';h-=1;"%h*h
h
в качестве счетчика разумно! Благодарю.PHP, 74 байта
источник
!$i|$n==++$i
вместо!$i|$n-1==$i++
$i++&&$n-$i?" ":"-"
$i++&&$n-$i?" ":"-"
->"- "[$i++&&$n-$i]
(-2)Vimscript,
9383757473666463 байтаКод
пример
объяснение
Обратите внимание, что он не используется,
norm!
поэтому он может мешать пользовательским сопоставлениям vim!источник
MATL , 19 байт
Попробуйте онлайн!
объяснение
Подход аналогичен тому, который использовался в этом другом ответе . Код строит числовой массив вида
и затем его значения используются как (основанные на 1, модульные) индексы в строке
'|-| '
для получения желаемого результата.источник
05AB1E ,
232220 байтВвод принимается как высота, а затем ширина.
объяснение
Попробуйте онлайн!
Сохранено 2 байта благодаря Аднану
источник
F„ -N_N¹<Q~è²Í×'|.ø,
.C 73 байта
источник
Python 2, 56 байт
flornquake спас один байт.
источник
%c
преобразование:'-%*c'%(h-1,45)
%*c
это даже не вещь! Спасибо. :)'-%%%dc'%~-h%45
также работает для той же длины.Common Lisp, 104 байта
Golfed:
Ungolfed:
источник
Turtlèd , 40 байт
Интерпретатор
немногобольше не Buggèdобъяснение
источник
Mathematica,
6764 байтаСпасибо Lastresort и TuukkaX за напоминание о том, что игроки в гольф должны быть хитрыми и экономить 3 байта!
Простая реализация. Возвращает массив строк.
источник
0<1
вместоTrue
j==1
может быть сведено кj<1
иi==1
кi<1
.Python 3,
10495 байт(обратная связь от @ mbomb007: -9 байт)
(мой первый код гольф, благодарю за отзыв)
источник
range(y)
вместоrange(0,y)
, и, еслиn
никогда не отрицательно, вы можете использоватьif n<1or n==~-y else
Пакетная, 128 байтов
Принимает ширину и высоту в качестве параметров командной строки.
источник
Haxe,
112106 байтTestcases
источник
Java 135 байт
Golfed:
источник
o+=x "|\n"
? Вы хотели положить+
туда?PowerShell v3 +, 55 байт
Принимает участие
$a
и$b
. Петли от1
до$b
. На каждой итерации мы строим одну строку. Середина выбирается из массива из двух строк одинарной длины, затем умножается на строку$a-2
, пока она окружена трубами. Результирующие строки остаются в конвейере, и вывод через неявноеWrite-Output
происходит при завершении программы с разделителем новой строки по умолчанию.Кроме того, также в 55 байтов
Это произошло потому, что я пытался поиграть в выбор массива в середине, используя вместо этого строку. Однако, так как
[char]
времена[int]
не определены, мы теряем на экономии, так как нам нужно привести в качестве строки с паренсами и''+
.Обе версии требуют v3 или новее для
-in
оператора.Примеры
источник
PHP, 82 байта
индексация статической строки, включая перевод строки
источник
Рубин,
595452 байтаО, это намного проще :)
Тестовый запуск в Ideone
источник
\n
.i
иj
. Заменитьi
определение наx-=2
. Вместо тогоj
, чтобы просто использовать(y-2)
.Perl, 48 байт
Включает +1 для
-n
Дайте размеры как 2 строки на STDIN
Просто код:
источник
Луа,
12093 байтаСохранено немало байтов путем удаления глупостей из-за сложностей.
Ungolfed:
Попробуйте это на Repl.it
источник
Python 2, 67 байт
Примеры
источник
MATL ,
2117 байтЭто немного другой подход, чем у MATL-God .
Спасибо @LuisMendo за помощь!
Попробуйте онлайн!
источник
PHP 4.1, 76 байт
Это предполагает, что у вас есть
php.ini
настройки по умолчанию для этой версии, включаяshort_open_tag
иregister_globals
включены.Для этого требуется доступ через веб-сервер (например, Apache), передавая значения через переменные session / cookie / POST / GET.
Ключ
W
контролирует ширину, а ключH
контролирует высоту.Например:
http://localhost/file.php?W=3&H=5
источник
Python 3, 74 символа
источник
Swift (2.2) 190 байт
Я думаю, что Swift 3 мог бы играть в гольф намного больше, но я не чувствую, что скачиваю Swift 3.
источник
F #, 131 байт
источник