Напишите программу, которая вводит размеры рисунка, ширину матирования и ширину рамки для портрета в рамке. Программа должна вывести диаграмму, используя символ X
для рисования, +
для матирования и #
для обрамления. Символы должны быть разделены пробелом. Конечный пробел в порядке, если результат визуально соответствует критериям. Входы могут быть 0
.
ВХОД: 3 2 1 2 (ширина, высота, матовая ширина, ширина кадра)
ВЫХОД:
В текстовой форме:
# # # # # # # # #
# # # # # # # # #
# # + + + + + # #
# # + X X X + # #
# # + X X X + # #
# # + + + + + # #
# # # # # # # # #
# # # # # # # # #
Код выигрыша завершает условия в наименьшем количестве байтов.
Ответы:
Python 2 , 98 байт
Попробуйте онлайн!
Печатает разделенную пробелами сетку, строго следуя спецификации. Меня удивляет, что
*=
используется для преобразованияa
иb
из чисел в строки.Python 3 может сохранить некоторые байты, избегая
' '.join
, может быть, больше, используя f-строки и выражения присваивания. Спасибо Джо Кингу за -2 байта.Python 3 , 93 байта
Попробуйте онлайн!
источник
JavaScript (ES6),
118 113107 байтПопробуйте онлайн!
комментарии
источник
MATL , 24 байта
Входные данные: высота, ширина, матовая ширина, ширина кадра.
Попробуйте онлайн!
объяснение
источник
Wolfram Language (Mathematica) , 142 байта
Попробуйте онлайн!
источник
Древесный уголь ,
484744 байтаПопробуйте онлайн! Ссылка на подробную версию кода. Примечание: конечный пробел. Редактировать: теперь использует алгоритм @ xnor. Объяснение:
Введите ширину и высоту и конвертируйте их в строки
X
s.Цикл по символам
+
и#
, преобразовывая их в строки длины, заданной оставшимися двумя входами. Затем зациклите эти две строки.Префикс и суффикс картины со строками для матирования и обрамления.
Зацикливайте строки, беря минимум горизонтальных и вертикальных символов, а затем делайте двойной интервал между строками, неявно печатая каждую строку в отдельной строке.
источник
05AB1E (наследие) / 05AB1E
--no-lazy
,3231 байтПринимает ввод в порядке
height, width, matte, frame
. Если порядок ввода, указанный в запросе, является строгим (все еще ожидающим проверки на OP), можно добавить начальныйs
(своп) для +1 байта.Требуется
--no-lazy
флаг компилятора Elixir в новой версии 05AB1E, поскольку Elixir ведет себя странным образом из-за ленивых вычислений для вложенных карт / циклов ( здесь результат без этого флага ).Попробуйте онлайн в устаревшей версии 05AB1E.
Попробуйте онлайн в новой версии 05AB1E с добавленным
--no-lazy
флагом.Объяснение:
источник
Желе , 17 байт
Попробуйте онлайн!
Аргумент 1:
[Frame width, Matte width]
Аргумент 2:
[Width, Height]
источник
Холст , 24 байта
Попробуй это здесь!
Должно быть на 5 байт короче, но не потому, что Canvas глючит ..
источник
R 119 байт
Попробуйте онлайн!
источник
Python 3.8 (предварительная версия) ,
116115113 байтовПопробуйте онлайн!
Первая попытка игры в гольф скоро будет улучшена.
a
это ширина,b
высота,c
матовая ширина иd
ширина кадра.-1 байт, используя
:=
оператор для определенияh
какe * d
-2 байта благодаря Джо Кингу, предложившему мне удалить параметры e и f
ОБЪЯСНЕНИЕ:
источник
e
назначения экономит вам два байта,f
назначение ничего не спасаетe
иf
назначения после обнаруженияg
ярлыкаJavascript, 158 байт
Может быть, можно немного урезать
источник
Perl 6 , 98 байт
Попробуйте онлайн!
Это порт ответа xnor на Python .
Perl 6 , 115 байт
Попробуйте онлайн!
Грубый анонимный кодовый блок с использованием многопланового списка Perl 6. Например,
@a[1;2] = 'X';
назначит'X'
элемент с индексом 2 из списка с индексом 1 и@a[1,2,3;3,4,5]='X'xx 9;
заменит все элементы с индексами3,4,5
списков с индексами1,2,3
с'X'
.Объяснение:
Во- первых, мы инициализируем список в виде
a+2*(c+d)
поb+2*(c+d)
прямоугольнику#
с.Затем мы назначаем внутренний прямоугольник
+
sНаконец, самый внутренний прямоугольник
X
s.источник
Желе ,
35312824 байтаПопробуйте онлайн!
Берет на вход в порядке рамки, мат, ширина, высота; разделенные запятой. Выводит изображение ASCII-art с рамкой и матовой поверхностью. Если порядок ввода строгий, мне нужно было бы добавить больше байтов (согласно моему исходному сообщению).
Пара гольфов на основе ответа @ EriktheOutgolfer; Я понял, что персонажи были в порядке ASCII, но не думал, как лучше этим воспользоваться, и забыл об этом
G
. Его все еще лучший ответ, хотя!источник
43134
потребуется 3 кодирующих символа, которые, включая начальный / завершающий символ, чтобы указать, что он закодирован, также будут иметь 5 байтов. И, возможно, у желе есть какой-то дубликат, поскольку второе число на 100 больше первого? Не уверены, что в желе возможны и коротки действия push 43134, duplicate, push 100, plus, pair ?Perl 5, 115 байт
TIO
источник
PowerShell , 132 байта
Попробуйте онлайн!
источник