Учитывая текст как это:
# #### ## #
## # ## #
#### ##
Выведите тот же текст, но соединив пиксели с символами ─│┌┐└┘├┤┬┴┼
. Если у пикселя нет соседей, не меняйте его.
Итак, вывод последнего текста:
│ ─┬── ┌─ │
└─ │ ┌┘ │
└──┘ ─┘
- Вы можете принять входные данные как логический массив.
- Вход всегда будет содержать не менее 1 пикселя.
- Вы можете считать символы рисования коробки как 1 байт.
- Вы можете предположить, что ввод дополнен пробелами.
Контрольные примеры
## #
=>
── #
###
#
=>
─┬─
│
##### ##
# # #
########
=>
─┬─┬─ ┌─
│ │ │
─┴─┴──┴─
# #
#####
# #
=>
│ │
─┼─┼─
│ │
# # # # #
# # # #
# # # # #
# # # #
# # # # #
=>
# # # # #
# # # #
# # # # #
# # # #
# # # # #
#####
#####
#####
#####
#####
=>
┌┬┬┬┐
├┼┼┼┤
├┼┼┼┤
├┼┼┼┤
└┴┴┴┘
Поскольку это код-гольф , выигрывает самый короткий код.
-|r7LJE3TW+
является подходящей заменой 1-байтовых символов для символов блока.Ответы:
Желе ,
605251504948 байтСохраненный байт благодаря @ Деннис.
Входные данные являются логическим массивом из 1 и 0. Итерирует по каждому столбцу и каждой строке, преобразуя заголовок и хвост каждого инфикса размера 3 из пары двоичных цифр в десятичную, и умножает это на центр каждого инфикса. Затем он суммирует сам с собой, чтобы найти индекс в
'#───│┌┐┬│└┘┴│├┤┼ '
.Попробуйте онлайн! ( случай 2 ) ( случай 3 ) ( случай 4 )
объяснение
Это основано на той же идее, что и мой ответ в J, но вместо обработки на каждом подмассиве 3x3 я обрабатываю каждую строку и каждый столбец, все еще получая одну и ту же таблицу индексов.
Более половины байтов тратится на создание списка символов блока
'#───│┌┐┬│└┘┴│├┤┼ '
. Строковые литералы начинаются с“
Jelly и имеют разные значения в зависимости от их терминатора. Здесь терминатор’
означает, что строка будет проанализирована как кодовые точки каждого символа в соответствии с кодовой страницей Jelly и преобразована из списка из 250 базовых цифр в десятичную.Затем преобразуйте это десятичное число в список цифр в биективном основании 61 и увеличьте каждое на 9471, чтобы переместить его в диапазон символов поля, и преобразуйте каждое с использованием символов Python
chr
. Затем добавьте к нему символьный литерал”#
и добавьте пробел⁶
.источник
J ,
827266 байтВходные данные являются булевой таблицей 1 и 0. Правила гласят, что каждый символ коробки считается одним байтом, а не тремя, и это было применено здесь.
использование
объяснение
Сначала ввод дополняется нулями со всех сторон.
Затем выбирается каждый подмассив размером 3
Тогда только 5 значений в каждом подмассиве рассматриваются
Значения
ABCD
выбираются путем выравнивания каждого подмассива и выбора индексов1 7 3 5
. Эти значения умножаютсяE
на индекс 4. Он затем преобразуется из списка двоичных цифр в десятичную и увеличивается наE
. Этиx
значения не нужны.Это используется в качестве индекса для выбора персонажа для рисования в соответствии с таблицей ниже (немного переупорядочено для игры в гольф). Последний столбец сопоставляет выходное значение каждого подмассива с символом поля.
Кроме того, в J строка
' #───│┌┐┬│└┘┴│├┤┼'
использует 8-битные символы, что делает ее длиной 47 (для каждого байта) для 17 необходимых символов. Командаucp
преобразует его в 16-битные символы, что позволяет ему быть длиной 17.источник
JavaScript (ES6),
155121103102 символаРедактировать: сохранено 18 байт с помощью ETHproductions
Редактировать: сохранено 1 байт с использованием 1-го параметра replace () как
'#'
Как это работает
Мы перебираем все
#
символы, найденные во входной строке. Для каждого из них мы проверяем, являются ли его соседи#
символами, используяt()
функцию:Параметр
x
вt()
функции смещение соседних по отношению к текущему положениюp
. Мы используем -1 / + 1 для проверки левых / правых соседей и -w / + w для верхних / нижних соседей (гдеw
ширина строки, то есть позиция первого разрыва строки + 1).Каждому соседу присваивается свой вес (1, 2, 4 или 8) в соответствии со следующим компасом:
Каждая комбинация весов приводит к уникальному значению в [0 .. 15]. Например, если заданы как соседний элемент сверху, так и соседний справа, сумма будет равна 1 + 4 = 5, что переводится в
└
следующую таблицу:Следовательно,
'#│─┘─└─┴││┐┤┌├┬┼'[weight_sum]
приводит к ожидаемому характеру.источник
s=>(w=s[0].length+1,s=s.join`\n`).replace(/#/g,(_,p)=>'#│─┘─└─┴││┐┤┌├┬┼'[t=x=>s[p+x]>' ',t(-w)+2*t(-1)+4*t(1)+8*t(w)])
s=>s.replace(/#/g,(_,p)=>'#│─┘─└─┴││┐┤┌├┬┼'[t=x=>s[p+x]>' ',t(-w)+2*t(-1)+4*t(1)+8*t(w)],w=s.indexOf`\n`+1)
Python 2,7,
318315 байт (270267 символов)Я уверен, что это может быть продолжено (особенно я хотел бы избавиться от этого раздражающего комментария первой линии), но вот моя запись:
Вот объяснение того, как все это работает:
РЕДАКТИРОВАТЬ: Удалены некоторые пробелы до
for ... in ...
источник
JavaScript (ES6),
150139133131 символПринимает ввод как массив строк, например
f(["###", " # "])
.Тестовый фрагмент
Показать фрагмент кода
источник
ALPACA , 414 + 2 = 416 байт
Требуются
-fI
флаги.Это решение использует очень большое количество байтов, но оно уникально тем, что использует клеточный автомат. ALPACA обычно используется как метаязык, но здесь я использую его как язык программирования.
Безголовая версия:
источник
PHP, 203 байта
Вероятно, это можно сделать более коротким способом.
читает ввод из STDIN. беги с
-r
.источник
Python 3, 149 байт
Принимает ввод как
##\n #\n
и возвращает вывод как['─', '┐', '\n', ' ', '│', '\n']
.источник
R,
199212 байтовРЕДАКТИРОВАТЬ: теперь это функция, а не фрагмент кода.
Ввод представляет собой матрицу
m
1 и 0. Это довольно уродливо и хакерски.Пара тестов:
источник
x = "┼"
у меня просто отлично работаетPerl,
8988 байтВключает в себя +2 за
-0p
. Специальные символы учитываются как 1 байт, но для того, чтобы они действительно отображались как отдельные символы, лучше также добавить опцию -C.Введите входные данные в STDIN с отступом между строками, чтобы они все имели одинаковую длину:
connect.pl
:источник
MATL, 102 символа
Я присваиваю соседу значение (1, 2, 4 или 8); их сумма будет соответствовать символу в строке, содержащей символы рисования. Я думаю, что есть еще много возможностей для улучшений, но для черновика:
Улучшения должны быть сделаны:
Попробуйте онлайн! (может не иметь поддержки рисования символов в рамке)
источник