У меня есть окно ASCII-art, и мне нужна программа, чтобы открыть его.
Примеры
Входные данные:
-------
| |
|_____|
Выход:
/
/
/
/
/
/
/
| |
|_____|
Спецификация
- Первая строка будет состоять только из
-
, по крайней мере, 3 из них - Средние строки будут начинаться с
|
пробелов и заканчиваться|
- Все средние ряды будут одинаковыми
- Последний ряд будет начинаться с
|
have_
и заканчиваться|
- Все строки будут одинаковой длины
Открытие коробки:
- Каждый
-
должен быть заменен на/
восходящие линии и позиции.
Ответы:
CJam, 14 байтов
Попробуйте онлайн!
Как это работает
источник
JavaScript ES6, 57 байт
Выводит ведущий символ новой строки. Работает, взяв строку
-
s и превратив их в треугольник, затем заменив-
s пробелами.Редактировать: 5 байтов сохранены благодаря @ edc65.
источник
f=s=>s[R='replace'](/-+/,s=>s[R](/-/g,"\n$'/"))[R](/-/g,' ')
\n
и конвертирую впоследствии).pb (НЕКОНКУРСНЫЙ), 125 байт
Версия pbi, необходимая для запуска этого ответа, новее, чем вопрос. Это работало бы в более старых версиях, за исключением того, что я никогда не удосуживался разрешить ввод новых строк. Ну что ж.
Во-первых, это определяет высоту поля путем подсчета новых строк во входных данных. Как только он узнает об этом, он идет в Y-положение правой стороны коробки, спускается туда, где он должен быть, и рисует стены и пол, заканчивая крышкой.
Проверьте эту забавную анимацию!
Длинная пауза - кисть, проходящая через вход.
Ungolfed:
источник
Pyth,
1614 байтовобъяснение
Спасибо @FryAmTheEggman за новый алгоритм!
Попробуй это здесь.
источник
Сетчатка,
3420 байтНа первом шаге каждый
-
заменяется-
следующим за ним, a/
и переводом строки. Новая строка в конце исходной первой строки удаляется. На втором шаге мы заменяем новые-
на пробелы, что приводит к желаемому результату.Попробуйте это онлайн здесь.
источник
$%'
для захвата трейлинг,-
который экономит 5 байт: попробуйте онлайн!MATL , 14
15байтУ ввода должен быть завершающий символ новой строки.
Попробуйте онлайн!
объяснение
источник
Japt,
282625221817 байтПроверьте это онлайн!
Выводит начальный символ новой строки, который является приемлемым в соответствии с ОП.
Как это работает
Это будет на 4 байта короче, если шарнир будет находиться на правом краю поля:
источник
JavaScript (ES6), 66
ТЕСТ
источник
Java 8,
158118 байтЭто только начало, но эй, FGITWFTW.
Ожидает ввод в виде строки, возвращает окно.
источник
Python 3, 1̶7̶0̶ 88 байт
Вот мой короткий (er) код: РЕДАКТИРОВАТЬ: теперь на 82 байта короче с правкой кода @Dennis!
Python 3, 421 байт
В качестве альтернативы, вы можете использовать тот, который открывает его медленно:
Чтобы использовать любой из них, вы должны создать текстовый файл в том же каталоге, содержащий поле ascii любой ширины или глубины, называемое «f.txt». Затем он откроет эту коробку.
источник
Баш,
858479 знаков(Версия Pure Bash, внешние команды не используются.)
Выводит ведущий символ новой строки.
Образец прогона:
источник
echo
внешняя команда -/usr/bin/echo
;)echo
Исполняемый файл существует для соответствия операционной системы со стандартами. В настоящее время он используется только в том случае, если важна переносимость, поскольку он соответствует стандарту. Но большинство современных оболочек имеют свои собственные встроенные функции,echo
которые используются по умолчанию: pastebin.com/RnxhweBv @Levi, если вы переименуете / переместите свой/usr/bin/echo
, мой код все еще будет работать.Perl
615433 + 3 = 36 символовЗапустите это как
Каждый
-
в первой строке заменяется на строку , которая является результатом конкатенации некоторого числа,
/
и\n
.${chr 39}
принимает значение в Perl (в) известный$'
ака$POSTMATCH
специальной переменной. Наконец, chomp избавляется от завершающего символа новой строки, который был добавлен для последнего-
символа.Спасибо @manatwork за сохранение более 7 символов.
Бонус -
s^-^" "x$i++."\\\n"^ge&&chop
открывает окно с правого края в 29 + 3 символа :). Запустите его как:источник
-
, так что да, я могу играть в гольф еще больше. Благодарность!$.==1
→$.<2
,&&chop
→&chop
, удалите лишнюю пару круглых скобокlength
, считайте{chr 39}
как 1, поскольку это не требуется только для версии командной строки из-за синтаксиса оболочки:$.<2&&s^-^" "x(length$')."/\n"^ge&chop
+ 2 символа для параметров командной строки = 40 согласно моему подсчету. pastebin.com/iDhUs9XX$.==1
или$.<2
может быть устранено, потому что содержит только первую строку-
\n
.s^-^$'=~y/-/ /r."/\n"^ge&chomp
Pyth,
2623 байтаТьфу. Определенно может быть короче; все еще работаю над этим.
источник
Python3, 76 байт
/
предшествует уменьшению числа пробелов.stdin
прямо наstdout
.РЕДАКТИРОВАТЬ: Я только что заметил, что мой код почти идентичен редактированию комментария @Dennis более короткого кода Python3 @ Monster, единственное отличие состоит в том, что выведите остаток от
stdin
прямой вместо сохранения в переменной. Великие умы!источник
Холст ,
64 байтаПопробуй это здесь!
Объяснение:
источник
Python 2, 100 байт
Определяет функцию,
o
которая принимает строку в качестве входных данных. (Полная программа не была указана в вопросе).источник
PowerShell, 55 байт
Принимает ввод
$args
в виде строки,-split
s на новых строках`n
( ссылочная ссылка ) , сохраняет первую строку в$d
(в виде строки), а оставшуюся в$b
(в виде массива строк). Затем мы выполняем цикл отlength
первой строки (минус 1) до0
каждой итерации и выводим это число пробелов плюс a/
. Наконец, вывод$b
(остальная часть входной строки), который по умолчанию будет выводить по одному на строку.Пример выполнения
источник
JavaScript (Node.js) , 56 байт
Попробуйте онлайн!
Должно быть написано как комментарий от @Neil «S ответа , но я не могу создать комментарии
источник
05AB1E (legacy) , 9 байтов
Попробуйте онлайн! (Наследство только)
Как это работает
источник
Древесный уголь , 14 байтов
Попробуйте онлайн (многословно) или онлайн (чисто) .
Объяснение:
Разбейте ввод по новым строкам, возьмите длину первой строки и напечатайте строку этой длины сверху вниз и слева внизу:
Двигайтесь один раз вправо:
Снова разделите ввод по новым строкам, удалите первый элемент и напечатайте то, что осталось неявно:
(ПРИМЕЧАНИЕ. Помещение входных данных, разделенных символами новой строки в переменной (так как я делаю это дважды выше), на
1 байт длиннееи на 14 байтов с использованием немного другого метода (благодаря @Neil ):≔⮌⪪θ¶θ↙L⊟θM→⮌θ
попробуйте онлайн (подробно) или попробуйте онлайн (чистый) ).источник
JavaScript ES6, 106 байт
Достаточно просто: получить длину первой строки, создать интервал-треугольник с трейлингом
/
и добавить его к оригиналу, разрезать и соединить.Проверьте это! (Только ES6
:(
)Показать фрагмент кода
источник
.repeat(n-i-1)
=>.repeat(n+~i)
Python 2,7,
120122 символовТребуется файл
f
с оригинальным / закрытым ящиком, вывод - открытый. Приветствую @Monster за идею ... постараюсь выяснить многострочный ввод позже и посмотрим, короче ли он.редактировать
/
есть место впереди; +2 байтаисточник
Рубин, 59 знаков
(57 символов кода + 2 символа параметров командной строки.)
Образец прогона:
источник
Баш, 129 знаков
Требуется файл
a
с закрытым полем, вывод на стандартный вывод.Можно было бы сделать его короче, используя
sed
и используя stdin и piping.источник
for i in $(seq `awk 'NR<2&&$0=length-1' a` -1 1);{ for j in `seq 1 $i`;{ printf \ ;};echo /;};echo /;tail -n2 a
PHP, 127 символов
Безголовая версия:
источник
$argv
. Вы можете применить несколько небольших трюков:$l=strlen(strtok($s=$argv[1],"↵"));while($l)$s=preg_replace("/-/","↵".str_repeat(" ",--$l-$i)."/",$s,1);echo$s;
(Используйте буквальный символ новой строки в своем коде, где «↵»: pastebin.com/36t2fb0P )Python, 125 байт (110 без коробки)
Если у кого-нибудь есть идеи, как его сократить, пожалуйста, дайте мне знать!
источник
Awk,
4746 символов(44 символа кода + 2 символа командной строки.)
Образец прогона:
источник
Гема,
514931 символовОбразец прогона:
источник
К (нгн / к) , 18 байт
Попробуйте онлайн!
источник
05AB1E (наследие) , 12 байтов
Попробуйте онлайн!
источник