斜体化ASCII艺术


32

给定ASCII艺术图片的输入,输出斜体的ASCII艺术。

斜体化ASCII文字:

  1. 在最后一行之前插入零空格,在倒数第二行之前插入一个空格,在倒数第三行之前插入两个空格,依此类推。

  2. 删除可能已创建的所有多余的前导空格。也就是说,如果每行n前面至少有空格,请n从每行的开头删除空格。

  3. 更换所有\以s |,所有|以s /,和所有/以s _。保持现有_相同。

    确保输入内容仅包含字符\|/_和空格。

例如,输入

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

必须输出

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

作为输入提供输出

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

将输出

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

输入和输出可以是单个字符串(带有可选的尾随换行符)或行的数组。

因为这是,所以以字节为单位的最短代码将获胜。

额外的测试案例:

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


________
________


(也就是说,输入空字符串会导致输出空字符串)


我们可以假定输入被填充为矩形吗?
马丁·恩德

2
每条输出线是否都可接受尾随空格?
路易斯·门多

@MartinBüttner是的,可以。
门把手

@DonMuesli尾随空格还可以,只是没有前导空格。
门把手

我们可以将输入作为矩形数组(矩阵)吗?
亚当

Answers:


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则转换会将其折叠到顶部。
Martin Ender

4

珀斯32

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

在这里尝试或运行测试套件

每行都有几个尾随空格。这是通过将.r内置的旋转应用于字符串的每一行来实现的。旋转将字符串中与每个自变量匹配的每个字符"\|/__"替换为下一个字符。双下划线很好地防止了下划线成为反斜杠。字符串也会根据其索引进行填充。

完成后,将各行压缩在一起,然后我们过滤掉仅包含空格的每一列,直到其中一个没有空格为止。然后,我们解压缩并加入换行符。


4

MATL38 33 29字节

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

输出行具有尾随空格以匹配最长的行(挑战允许)。

输入是字符串的单元格数组(列表)。数组使用花括号,字符串使用单引号,如下所示(单击每个链接以在线尝试!)。

  • 第一个例子

    {'/\/\/\    /\/\/\      /\/\/\    /\/\/\'  ' /\    /\  /\    /\  /\        /\'  '  /\/\/\    /\/\/\    /\        /\  /\/\' '   /\        /\        /\        /\    /\' '    /\        /\          /\/\/\    /\/\/\'}
    
  • 第二个例子

    {'_|_|_|    _|_|_|      _|_|_|    _|_|_|' '_|    _|  _|    _|  _|        _|      ' '_|_|_|    _|_|_|    _|        _|  _|_|' '_|        _|        _|        _|    _|' '_|        _|          _|_|_|    _|_|_|'}
    
  • 第三个例子

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

说明

该数组最初翻转。每个字符串都循环处理,并将修改后的字符串压入堆栈。处理包括替换字符并添加多个空格。空格的数量等于堆栈中当前元素的数量(由于数组已被翻转的事实)。

循环之后,字符串将被收集到一个数组中,该数组被转回,转换为2D 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)]))

接受并以字符串数组形式返回行。

编辑:由于@ user81655,节省了22个字节。通过意识到输入限制为5个字符\|/_和空格来节省1个字节。


replace可将s组合成.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)]))
user81655,2016年

@ user81655哇,谢谢!(然后,我打了一个字节让你有点生气replace。)
尼尔(Neil

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.