Italicize ASCII ст


32

Враховуючи художню картину ASCII, виведіть курсивне зображення ASCII.

Щоб виділити курсив мистецтва ASCII:

  1. Вставте нульові пробіли перед останнім рядком, один пробіл перед другим-останнім рядком, два пробіли перед третім-останнім рядком тощо.

  2. Видаліть зайві провідні пробіли, які, можливо, були створені. Тобто, якщо в кожному рядку є принаймні nпробіли, що передують йому, видаліть nпробіли з початку кожного рядка.

  3. Замініть всі \s |, всі |s на /, і всі /s на _. Зберігайте існуючі _s однаковими.

    Гарантія містить лише символи \|/_та пробіл.

Наприклад, вхід

/\/\/\    /\/\/\      /\/\/\    /\/\/\
 /\    /\  /\    /\  /\        /\
  /\/\/\    /\/\/\    /\        /\  /\/\
   /\        /\        /\        /\    /\
    /\        /\          /\/\/\    /\/\/\

повинен вивести

_|_|_|    _|_|_|      _|_|_|    _|_|_|
_|    _|  _|    _|  _|        _|
_|_|_|    _|_|_|    _|        _|  _|_|
_|        _|        _|        _|    _|
_|        _|          _|_|_|    _|_|_|

що, в свою чергу, надається як вхідний, вихідний

    _/_/_/    _/_/_/      _/_/_/    _/_/_/
   _/    _/  _/    _/  _/        _/
  _/_/_/    _/_/_/    _/        _/  _/_/
 _/        _/        _/        _/    _/
_/        _/          _/_/_/    _/_/_/

які б вивели

        ______    ______      ______    ______
      __    __  __    __  __        __
    ______    ______    __        __  ____
  __        __        __        __    __
__        __          ______    ______

Вхід і вихід можуть бути або одним рядком (з необов'язковим зворотним новим рядком), або масивом рядків.

Оскільки це , найкоротший код у байтах виграє.

Додаткові тестові справи:

|||||
  /////
 \\\\\
   _____
 /////
  _____
|||||
 _____


________
________


(тобто введення порожнього рядка призводить до виведення порожнього рядка)


Чи можна припустити, що вхід підкладений до прямокутника?
Мартін Ендер

2
Чи прийнятні пробіли у кожному рядку виводу?
Луїс Мендо

@ MartinBüttner Так, можна.
Дверна ручка

@DonMuesli Трейлінг-пробіли добре, просто немає провідних пробілів.
Дверна ручка

Чи можемо ми приймати введення як прямокутний масив (матриця)?
Адам

Відповіді:


6

CJam, 43 38 байт

qN/W%eeSf.*:sW%z_{S-}#>zN*"\|/__"_(+er

Потрібен вклад до прямокутника.

Спробуйте в Інтернеті!

Пояснення

qN/     e# Read input, split into lines.
W%      e# Reverse lines.
ee      e# Enumerate them (pairing each line with its index starting from 0).
Sf.*    e# Turn each index i into i spaces.
:s      e# Flatten each pair into a single string, prepending the spaces.
W%      e# Reverse the lines again.
z_      e# Transpose the character grid, duplicate it.
{S-}#   e# Find the first row index that contains non-spaces.
>       e# Discard that many rows.
zN*     e# Transpose back and join with linefeeds.
"\|/__" e# Push this string.
_(+     e# Make a copy that's rotated one character to the left, i.e. "|/__\".
er      e# Perform character transliteration mapping from the first string to the second.

Анекдотично, але я спробував приклад PCCG із запитання, подаючи кожен вихід назад у програму, але без забивання прямокутника. Працював чудово.
alexwlchan

@alexwlchan Так, так, пробіли поза межами прямокутного прямокутника не мають значення (але вони не обов'язково будуть збережені). Але якщо взяти для прикладу сам оригінальний приклад PPCG і видалити проміжки, що знаходяться всередині, Gтоді перетворення згорнуть його до верху.
Мартін Ендер

4

Піта, 32

jCf|Z=Z-Td.t_.e+*kd.rb"\|/__"_Qd

Спробуйте тут або запустіть тестовий набір

У кожному рядку є кілька пробілів. Це працює, застосовуючи .rобертання, вбудоване до кожного рядка рядка. Обертання приймає кожен символ у рядку, який відповідає одному аргументу в іншому, "\|/__"і замінює його наступним символом. Подвійне підкреслення добре запобігає підкреслити штрихи. Рядки також прокладені відповідно до їх індексу.

Як тільки це буде зроблено, рядки прошиваються разом, потім ми фільтруємо кожен стовпець, який містить лише пробіли, поки один з них не зробить це. Потім ми розпаковуємо і приєднуємось до нових рядків.


4

MATL , 38 33 29 байт

P"NZ"@Y:'\|/' '|/_'XEh]XhPcYv

У вихідних рядках є пробіли, які відповідають найдовшій лінії (це дозволено завданням).

Введення - це масив комірок (список) рядків. Масив використовує фігурні дужки, а рядки використовують одинарні лапки, як описано нижче (натисніть кожне посилання, щоб спробувати його в Інтернеті! ).

  • Перший приклад :

    {'/\/\/\    /\/\/\      /\/\/\    /\/\/\'  ' /\    /\  /\    /\  /\        /\'  '  /\/\/\    /\/\/\    /\        /\  /\/\' '   /\        /\        /\        /\    /\' '    /\        /\          /\/\/\    /\/\/\'}
    
  • Другий приклад :

    {'_|_|_|    _|_|_|      _|_|_|    _|_|_|' '_|    _|  _|    _|  _|        _|      ' '_|_|_|    _|_|_|    _|        _|  _|_|' '_|        _|        _|        _|    _|' '_|        _|          _|_|_|    _|_|_|'}
    
  • Третій приклад :

    {'    _/_/_/    _/_/_/      _/_/_/    _/_/_/' '   _/    _/  _/    _/  _/        _/       ' '  _/_/_/    _/_/_/    _/        _/  _/_/  ' ' _/        _/        _/        _/    _/   ' '_/        _/          _/_/_/    _/_/_/    '}
    

Пояснення

Масив спочатку перевернутий. Кожна рядок обробляється в циклі, і змінена рядок висувається на стек. Обробка полягає в заміні символів та додаванні ряду пробілів. Кількість пробілів дорівнює поточній кількості елементів у стеку (завдяки тому, що масив був перевернутий).

Після циклу рядки збираються у масив, який відвернутий назад, перетворений у двовимірний масив char та розміщений з небажаних провідних пробілів: провідні пробіли, які є у всіх рядках 2D-масиву char.

P             % implicitly input cell array of strings. Flip it (reverse order)
"             % for each
  NZ"         %   string with as many spaces as elements there are on the stack
  @Y:         %   push current input string
  '\|/'       %   push string: origin for replacement
  '|/_'       %   push string: target for replacement
  XE          %   replace
  h           %   concatenate string with spaces and modified-character string
]             % end for each
Xh            % collect all processed strings in a cell array
P             % flip back to restore original order
c             % convert to 2D char array
Yv            % remove trailing spaces common to all rows. Implicitly display

2

JavaScript (ES6), 171 149 148 байт

a=>a.map(s=>(t=' '.repeat(--i)+s,l=t.match` *`[0].length,n=l<n?l:n,t),n=i=a.length).map(s=>s.slice(n).replace(/./g,c=>"|/__ "["\\|/_ ".indexOf(c)]))

Приймає та повертає рядки як масив рядків.

Редагувати: Збережено 22 байти завдяки @ user81655. Збережено 1 байт, зрозумівши, що введення обмежено 5 символами \|/_та пробілом.


replaces можуть бути об'єднані .replace(/[\\|/]/g,m=>"|/_"["\\|/".indexOf(m)]), match(/ */)можуть бути match` *`, перші два maps можуть бути об'єднані 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)]))
користувач81655

@ user81655 Нічого, дякую! (Тоді я дещо зіпсував це, погравши в байт від тебе replace.)
Ніл

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.