기울임 꼴 ASCII 아트


32

ASCII 아트 픽쳐가 입력되면 ASCII 아트를 이탤릭체로 출력합니다.

ASCII 아트를 기울임 꼴로 표시하려면

  1. 마지막 줄 앞에 공백없이, 두 번째 마지막 줄 앞에 공백, 세 번째 마지막 줄 앞에 두 공백 등을 삽입하십시오.

  2. 생성 된 추가 공백을 제거하십시오. 즉, 각 줄 n앞에 적어도 공백 이 있으면 각 줄 n의 시작 부분에서 공백을 제거 하십시오.

  3. 모든 교체 \와의 |모든 |과의 /, 그리고 모든 /과들 _. 기존을 _동일하게 유지하십시오 .

    입력은 문자 \|/_와 공백 만 포함하도록 보장됩니다 .

예를 들어, 입력

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

출력해야합니다

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

입력으로 제공되는 출력

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

어떤 출력

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

입력 및 출력은 단일 문자열 (선택적 후행 줄 바꿈 포함) 또는 행 배열 일 수 있습니다.

이것이 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.

추가 테스트 사례 :

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


________
________


즉, 빈 문자열을 입력하면 빈 문자열이 출력됩니다.


입력이 사각형으로 채워 졌다고 가정 할 수 있습니까?
마틴 엔더

2
각 출력 라인에 후행 공백이 허용됩니까?
Luis Mendo

@ MartinBüttner 네, 가능합니다.
Doorknob

@DonMuesli 후행 공백은 괜찮으며 선행 공백은 없습니다.
Doorknob

직사각형 배열 (행렬)로 입력을받을 수 있습니까?
Adám

답변:


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

여기 사용해보십시오 하거나 Test Suite를 실행하십시오.

각 줄에는 여러 개의 후행 공백이 있습니다. 이것은 적용하여 작동합니다.r 문자열의 각 줄에 내장 회전 합니다. 로테이션은 문자열의 각 문자를 다른 인수의 "\|/__"문자와 일치시켜 다음 문자로 바꿉니다. 이중 밑줄은 밑줄이 백 슬래시가되는 것을 방지합니다. 문자열은 색인에 따라 채워집니다.

이 작업이 완료되면 줄이 서로 압축 된 다음 공백 만 포함 된 각 열을 필터링합니다. 그런 다음 압축을 풀고 개행을 시작합니다.


4

MATL , 38 33 29 바이트

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

출력 라인에는 가장 긴 라인과 일치하는 후행 공백이 있습니다 (챌린지에 의해 허용됨).

입력은 문자열의 셀형 배열 (목록)입니다. 배열은 중괄호를 사용하고 문자열은 다음과 같이 작은 따옴표를 사용합니다 ( 온라인으로 연결하려면 각 링크를 클릭하십시오 ! ).

  • 첫 번째 예 :

    {'/\/\/\    /\/\/\      /\/\/\    /\/\/\'  ' /\    /\  /\    /\  /\        /\'  '  /\/\/\    /\/\/\    /\        /\  /\/\' '   /\        /\        /\        /\    /\' '    /\        /\          /\/\/\    /\/\/\'}
    
  • 두 번째 예 :

    {'_|_|_|    _|_|_|      _|_|_|    _|_|_|' '_|    _|  _|    _|  _|        _|      ' '_|_|_|    _|_|_|    _|        _|  _|_|' '_|        _|        _|        _|    _|' '_|        _|          _|_|_|    _|_|_|'}
    
  • 세 번째 예 :

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

설명

배열은 처음에 뒤집 힙니다. 각 문자열은 루프로 처리되고 수정 된 문자열은 스택으로 푸시됩니다. 처리는 문자를 바꾸고 여러 공백을 추가하는 것으로 구성됩니다. 공백의 수는 스택의 현재 요소 수와 같습니다 (배열이 뒤집 혔기 때문에).

루프 후 문자열은 배열에서 수집되며,이 배열은 뒤집히고 2D 문자 배열로 변환되며 원하지 않는 선행 공백, 2D 문자 배열의 모든 행에 존재하는 선행 공백으로 처리됩니다.

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

자바 스크립트 (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` *`처음 둘 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.)
Neil

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.