Учитывая ввод художественного изображения ASCII, выводите художественное выделение ASCII курсивом.
Курсивом ASCII art:
Вставьте ноль пробелов перед последней строкой, один пробел перед второй-последней строкой, два пробела перед третьей-последней строкой и т. Д.
Удалите все лишние пробелы, которые могли быть созданы. То есть, если
n
перед каждой строкой есть хотя бы пробелы, удалитеn
пробелы в начале каждой строки.Замените все
\
s на|
, все|
s на/
, и все/
s на_
. Оставьте существующие_
с прежними.Входные данные гарантированно содержат только символы
\|/_
и пробел.
Например, вход
/\/\/\ /\/\/\ /\/\/\ /\/\/\
/\ /\ /\ /\ /\ /\
/\/\/\ /\/\/\ /\ /\ /\/\
/\ /\ /\ /\ /\
/\ /\ /\/\/\ /\/\/\
должен выводить
_|_|_| _|_|_| _|_|_| _|_|_|
_| _| _| _| _| _|
_|_|_| _|_|_| _| _| _|_|
_| _| _| _| _|
_| _| _|_|_| _|_|_|
которые, в свою очередь, предоставляются в качестве входных данных, выходов
_/_/_/ _/_/_/ _/_/_/ _/_/_/
_/ _/ _/ _/ _/ _/
_/_/_/ _/_/_/ _/ _/ _/_/
_/ _/ _/ _/ _/
_/ _/ _/_/_/ _/_/_/
который бы вывел
______ ______ ______ ______
__ __ __ __ __ __
______ ______ __ __ ____
__ __ __ __ __
__ __ ______ ______
Ввод и вывод может быть либо одной строкой (с необязательным завершающим переводом строки), либо массивом строк.
Поскольку это код-гольф , победит самый короткий код в байтах.
Дополнительные тестовые случаи:
|||||
/////
\\\\\
_____
/////
_____
|||||
_____
________
________
(то есть, ввод пустой строки приводит к выводу пустой строки)
Ответы:
CJam,
4338 байтТребуется, чтобы ввод был дополнен прямоугольником.
Попробуйте онлайн!
объяснение
источник
G
то преобразование свернет его до вершины.Пиф, 32
Попробуйте здесь или запустите Test Suite
Каждая строка имеет несколько пробелов. Это работает, применяя
.r
вращение, встроенное в каждую строку строки. Вращение принимает каждый символ в строке, который соответствует одному в другом аргументе,"\|/__"
и заменяет его следующим символом. Двойное подчеркивание прекрасно предотвращает обратную косую черту. Строки также дополняются на основе их индекса.Как только это будет сделано, строки будут сжаты вместе, а затем мы отфильтруем каждый столбец, содержащий только пробелы, до тех пор, пока один из них этого не сделает. Затем мы распаковываем и присоединяемся к новым строкам.
источник
MATL ,
383329 байтВыходные строки имеют завершающие пробелы, чтобы соответствовать самой длинной строке (это допускается задачей).
Ввод - это массив ячеек (список) строк. Массив использует фигурные скобки, а строки используют одинарные кавычки, как показано ниже (нажмите на каждую ссылку, чтобы попробовать онлайн! ).
Первый пример :
Второй пример :
Третий пример :
объяснение
Массив изначально перевернут. Каждая строка обрабатывается в цикле, а измененная строка помещается в стек. Обработка состоит в замене символов и добавлении нескольких пробелов. Количество пробелов равно текущему количеству элементов в стеке (благодаря тому, что массив был перевернут).
После цикла строки собираются в массив, который переворачивается обратно, преобразуется в массив двумерных символов и удаляется из нежелательных начальных пробелов: начальных пробелов, присутствующих во всех строках массива двумерных символов.
источник
JavaScript (ES6),
171149148 байтПринимает и возвращает строки в виде массива строк.
Редактировать: 22 байта сохранены благодаря @ user81655. Сохраняется 1 байт, понимая, что ввод ограничен 5 символами
\|/_
и пробелом.источник
replace
s может быть объединен в.replace(/[\\|/]/g,m=>"|/_"["\\|/".indexOf(m)])
,match(/ */)
может бытьmatch` *`
, первые дваmap
s могут быть объединеныa.map(s=>(t=' '.repeat(--i)+s,(l=t.match` *`[0].length)<n?n=l:l,t),...
, внешние скобки ((a=...)
) теперь могут быть удалены. 149 байт:a=>a.map(s=>(t=' '.repeat(--i)+s,(l=t.match` *`[0].length)<n?n=l:l,t),n=i=a.length).map(s=>s.slice(n).replace(/[\\|/]/g,m=>"|/_"["\\|/".indexOf(m)]))
replace
.)Dyalog APL (более старые версии),
2348 байтРегулировка пробела стоит дорого:
Это требует
⎕ML←0
, который был по умолчанию до недавнего времени .источник