Вызов
Учитывая оператор ASCII из приведенного ниже списка и число n, нарисуйте представление оператора ASCII, используя этот оператор в качестве символа, с отрезками линии оператора, имеющими длину n .
вход
Символ ASCII из списка = + - x /
и целое число n
где n >= 1
. (Я использую x
вместо *
и /
вместо ÷
, но вы можете использовать любой из них, что проще). Для +
и x
вам нужно только обрабатывать нечетные числа, чтобы избежать проблем с выравниванием.
Выход
Рисунок ASCII оператора, состоящий из символа с сегментами длины n. Горизонтальные части должны иметь пробелы между символами, чтобы компенсировать разницу по вертикали / горизонтали.
правила
Это код-гольф , поэтому выигрывает самый короткий код в байтах. Стандартные лазейки запрещены.
Примеры
Входные данные: + 3
+
+ + +
+
Входные данные: = 4
= = = =
= = = =
Входные данные: = 10
= = = = = = = = = =
= = = = = = = = = =
Входные данные: - 2
- -
Входные данные: / 10
/
/
/
/
/
/
/
/
/
/
Входные данные: x 7
x x
x x
x x
x
x x
x x
x x
= 10
?Ответы:
Пип ,
625956 байт55 байт кода, +1 для
-S
флага.Обратите внимание, что это решение работает с вводом
÷
для деления и*
для умножения, хотя оно использует эти символы для рисования ASCII-art/
иx
, соответственно. ОП уточнил, что это нормально. Попробуйте онлайн!Как?
Вот частично размеченная и прокомментированная версия . Обратите внимание, что
a
иb
являются аргументами командной строки, то есть оператором и размером соответственно. В-S
управлении флагом , как списки выход: он соединяет на первом символ новой строки, но соединяет любые вложенные списки на пространствах.А вот отдельные разделы:
умножение
Для каждой строки на рисунке мы генерируем строку пробелов и затем заменяем два из них входным символом. Для строки
i
мы хотим заменить пробелы в индексеi
иb-1-i
; но учтите, что последний может использовать отрицательный индекс-1-i
. (Это даже короче, потому что переменнаяv
предварительно инициализирована в negati v e 1.)прибавление
Используя стратегию из моего Рисования пустого квадратного ответа, мы определяем функцию, которая переносит a
+
вb/2
копии своего аргумента и возвращает результат в виде списка символов. (Целочисленное деление//
не требуется, потому что оператор повторения строкX
автоматически усекается до целого числа.) Сначала мы вызываем эту функцию в пробеле, давая[" ";" ";"+";" ";" "]
; затем мы сопоставляем ту же функцию с этим результатом, давая[" ";" ";"+";" ";" "]
на большинстве линий, но["+";"+";"+";"+";"+"]
на центральной линии. Этот вложенный список затем выводится из-за-S
флага с пробелами между всеми символами в строке и символами новой строки между строками.разделение
В каждой строке есть пробелы
b-1
и0
пробелы, за которыми следует вводимый символa
.Вычитание
Создайте разделенную пробелами строку входного символа. Сохраните копию на потом.
Равно
Шаг вычитания хранил половину того, что нам нужно, - просто
y
удвоил его.Фиктивные
x
значения используются для заполнения основного списка, так что модульная индексация дает уникальный индекс для каждого входного символа в+-*÷=
.источник
V ,
78, 72, 71, 68, 65, 63, 62, 61 байтПопробуйте онлайн!
Как всегда, битва шеи и шеи с 05AB1E - это действительно весело!
Так как он содержит не-ASCII символы, вот hexdump:
Это создает ведущие пробелы в выходных данных для
=
и-
, но это, по-видимому, разрешено . Если это не разрешено, не стесняйтесь комментировать, и я вернусь.объяснение
«Глобальная команда» (например
ç
) применяет определенный набор команд к каждой строке, соответствующей определенному регулярному выражению. СинтаксисЭто самый простой способ моделирования оператора условного перехода / переключения. В своем первоначальном ответе я просто создал всю ASCII-графику справа для каждого отдельного символа, который нам нужно найти. Однако многие из этих выходов требуют аналогичных команд. И я их объединил. Первая команда ('Ç') фактически является обратной к глобальной команде, она применяет команду к каждой строке, не соответствующей регулярному выражению. Итак, первая команда:
Следующая команда предназначена для входов '=' и '-'. Эти два удобны легко и похожи. После этой команды нам больше не нужно обрабатывать
-
.Отсюда мы просто делаем несколько дополнительных команд для каждого отдельного возможного ввода. Для
+
:Команда для равных очень проста. Мы просто дублируем это
Ä
. Для/
:Последний самый сложный. Это в основном порт этого ответа .
источник
ç
(а также поиск и замена,/
и?
) все моделируют часть командной строки vim, где вы должны нажать Enter, чтобы фактически запустить команду05AB1E ,
8176747370696865646260595756 байтВ настоящее время в войне с V ответом . Я иду за тобой, доктор МакМойлекс: с.
Также в войне с ответом Пипа . Я буду наблюдать за тобой мистер DLosc.
Код:
Или в более читаемой форме:
Использует кодировку CP-1252 . Попробуйте онлайн!
источник
Python 3,
304283278 байтДостаточно просто, просто создает матрицу символов и применяет различные операции, в зависимости от того, какая она есть. У
=
и-
есть пробелы, если это не так уж плохо.РЕДАКТИРОВАТЬ: Спасибо @Shebang и @Rod за их предложения, которые в итоге сэкономили 21 байт!
EDIT2: Спасибо @Artyer за сохранение 5 байтов!
источник
if'-'==t
строку условия и заменив одну над ней наif t in'=-':b=[[t+' ']*s]*(2*(t>'-'))
(я думаю).exec(['+ block','/ block','x block','= block','- block']['+/x=-'.find(t)])
чтобы сохранить ~ 18 байт.split()
(без пробелов в пробелах). В строке 6 вы пропустили пробел (b=[[x+' 'for
). Вы можете сделать последнюю строкуprint(*map(''.join,b),sep='\n')
на 1 байт меньше.JavaScript (ES6),
238225215202196 байтВозможно, в гольф, но это только начало.
источник
Scala, 275 байт
Использование:
Объяснение:
Код проверяет значение ascii char, чтобы выбрать правильный способ генерации изображения. Значения ascii рассматриваемых операторов:
('+' -> 43), ('-' ->45), ('/' -> 47), ('=' -> 61), ('x' -> 120)
источник
JavaScript (ES6), 156 байт
Где
\n
представляет буквальный символ новой строки.источник
SyntaxError: invalid property id
как написано в настоящее время, но изменение обратных черт вокруг косой черты на апострофы исправило это. (Почему у вас есть обратные+
,-
и=
выглядеть иначе , чем на вызов призывы: «горизонтальные части должны иметь пробела между символами , чтобы компенсировать вертикальные / горизонтальные различия расстояния.»Дьялог АПЛ ,
9186 байтНеобходимо
⎕IO←0
, что по умолчанию на многих системах. Принимает n в качестве левого аргумента и один из + - × ÷ = в качестве правого аргумента.объяснение
источник
Mathematica, 191 байт
Анонимная функция. Принимает строку и число в качестве входных данных и возвращает строку в качестве выходных данных. Не самая короткая на сегодняшний день, но все же интересно писать.
источник
C 396 байт
Звоните с:
источник
SOML ,
104100 байт (не конкурирует)Это своего рода соревнование, так как я почти уверен, что все, что я здесь использовал, имеет документы на github до даты публикации этих вопросов, но парсер не поддерживает некоторые функции, которые я использовал, так что idk.
источник
PHP,
306292281282281275270 байтОх, это громоздко ... нуждается в дальнейшем игре в гольф.
Я мог бы сохранить 4 байта с физическими переносами строк или один байт, поместив "\ n" в переменную.
источник
C #, 744 байта
Думаю, это как 1 миллион символов, но мне все равно, я так счастлив, что решил это ...
Golfed:
Ungolfed:
Тестирование:
Слишком много, чтобы вставить и отформатировать здесь, я создал pastebin:
Pastebin
источник
C, 331 байт
Оператор передается в виде ASCII-кода,
o
а число символов - вn
. Я только добавил пробелы между горизонтально идущими друг за другом символами в знак плюс, так как это был единственный, где результат был бы искажен, если бы я не сделал, и в задаче он только сказал «должен». Я использую два вложенных цикла обратного отсчета (кроме случаев,-
когда мне нужна только одна строка).=
Три линии, одна из них пустая, прямая+
используяprintf
из-за пробелов-
прямо вперед/
иметь печать внутреннего цикла в нуле и начинать со счетчика внешнего циклаx
иметь печать внутреннего цикла на счетчике внешнего цикла и его "обратный"n-i
. Еще нужно посмотреть, почему я здесь один на один.Образец звонка:
источник
Lua,
402344312 байт312:
344:
402:
Уменьшено на 90 символов, и теперь больно смотреть на него, даже когда он расширен. : |
источник