ASCIIアートを斜体にする


32

ASCIIアート画像の入力が与えられた場合、ASCIIアートを斜体で出力します。

ASCIIアートを斜体にするには:

  1. 最後の行の前にゼロスペース、最後から2番目の行の前に1スペース、最後から3番目の行の前に2スペースを挿入します。

  2. 作成された可能性のある余分な先行空白を削除します。つまり、各行のn前に少なくともスペースがある場合は、各行nの先頭からスペースを削除します。

  3. すべて置き換え\秒で|、すべて|との/、およびすべて/のと_。既存_のものを同じにしてください。

    入力には、文字\|/_とスペースのみが含まれることが保証されています。

たとえば、入力

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

出力する必要があります

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

次に、入力として提供され、出力されます

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

出力するだろう

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

入力と出力は、単一の文字列(オプションの末尾の改行を含む)または行の配列のいずれかです。

これはであるため、バイト単位の最短コードが優先されます。

追加のテストケース:

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


________
________


(つまり、空の文字列を入力すると、空の文字列が出力されます)


入力が長方形に埋め込まれていると仮定できますか?
マーティンエンダー

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

Pyth、32

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

ここで試してみるか、テストスイートを実行してください

各行には複数の末尾スペースがあります。これ.rは、文字列の各行に組み込まれている回転を適用することで機能します。回転は、他の引数の文字と一致する文字列の各文字"\|/__"を取得し、次の文字に置き換えます。二重アンダースコアは、アンダースコアがバックスラッシュになるのをうまく防ぎます。文字列もインデックスに基づいて埋め込まれます。

それが完了すると、行は一緒に圧縮され、スペースのみが含まれる各列をフィルターで除外します。次に、解凍​​して改行に参加します。


4

MATL38 33 29バイト

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

出力行には、最長行に一致する末尾スペースがあります(チャレンジで許可されています)。

入力は、文字列のセル配列(リスト)です。次のように、配列は中括弧を使用し、文字列は一重引用符を使用します(各リンクをクリックして、Try it online!)。

  • 最初の例

    {'/\/\/\    /\/\/\      /\/\/\    /\/\/\'  ' /\    /\  /\    /\  /\        /\'  '  /\/\/\    /\/\/\    /\        /\  /\/\' '   /\        /\        /\        /\    /\' '    /\        /\          /\/\/\    /\/\/\'}
    
  • 2番目の例

    {'_|_|_|    _|_|_|      _|_|_|    _|_|_|' '_|    _|  _|    _|  _|        _|      ' '_|_|_|    _|_|_|    _|        _|  _|_|' '_|        _|        _|        _|    _|' '_|        _|          _|_|_|    _|_|_|'}
    
  • 3番目の例

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

説明

配列は最初に反転されます。各文字列はループで処理され、変更された文字列がスタックにプッシュされます。処理は、文字の置換といくつかのスペースの追加から成ります。スペースの数は、スタック内の現在の要素の数に等しくなります(配列が反転されているため)。

ループの後、文字列は配列に収集され、反転され、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をに結合することができ.replace(/[\\|/]/g,m=>"|/_"["\\|/".indexOf(m)])match(/ */)することができmatch` *`、最初の2 mapをに結合することができ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

@ user81655わあ、ありがとう!(それから私はあなたのバイトをゴルフでやや台無しにしましたreplace。)
ニール

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.