In nghiêng nghệ thuật ASCII


32

Đưa ra một đầu vào của một bức tranh nghệ thuật ASCII, xuất ra chữ in nghiêng nghệ thuật ASCII.

Để in nghiêng nghệ thuật ASCII:

  1. Chèn khoảng trắng trước dòng cuối cùng, một khoảng trắng trước dòng thứ hai, hai khoảng trắng trước dòng thứ ba, v.v.

  2. Xóa mọi khoảng trắng hàng đầu bổ sung có thể đã được tạo. Đó là, nếu mỗi dòng có ít nhất nkhoảng trắng trước nó, hãy xóan khoảng trắng khỏi đầu mỗi dòng.

  3. Thay thế tất cả \bằng |, tất cả |bằng /và tất cả /bằng _. Giữ hiện tại_ s như nhau.

    Đầu vào được đảm bảo chỉ chứa các ký tự \|/_và khoảng trắng.

Ví dụ: đầu vào

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

phải xuất

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

lần lượt, được cung cấp như đầu vào, đầu ra

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

cái nào sẽ xuất

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

Đầu vào và đầu ra có thể là một chuỗi đơn (với dòng mới theo dõi tùy chọn) hoặc một mảng các dòng.

Vì đây là , mã ngắn nhất tính bằng byte sẽ thắng.

Các trường hợp kiểm tra thêm:

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


________
________


(nghĩa là đầu vào của chuỗi rỗng dẫn đến đầu ra của chuỗi trống)


Chúng ta có thể giả sử rằng đầu vào được đệm vào một hình chữ nhật?
Martin Ender

2
Là không gian dấu được chấp nhận trong mỗi dòng đầu ra?
Luis Mendo

@ MartinBüttner Vâng, bạn có thể.
Doorknob

@DonMuesli Không gian lưu trữ là ổn, chỉ là không có không gian hàng đầu.
Doorknob

Chúng ta có thể lấy đầu vào là một mảng hình chữ nhật (ma trận) không?
Adám

Câu trả lời:


6

CJam, 43 38 byte

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

Yêu cầu đầu vào được đệm vào một hình chữ nhật.

Hãy thử trực tuyến!

Giải trình

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.

Giai thoại, nhưng tôi đã thử ví dụ PCCG từ câu hỏi, đưa từng đầu ra trở lại chương trình, nhưng không đệm vào hình chữ nhật. Làm việc tốt
alexwlchan

@alexwlchan Vâng, không gian bên kia hình chữ nhật giới hạn không quan trọng (nhưng sẽ không nhất thiết phải được bảo tồn). Nhưng nếu bạn lấy ví dụ PPCG ban đầu, ví dụ, và xóa các khoảng trắng ở bên trong Gthì phép biến đổi sẽ thu gọn nó lên trên cùng.
Martin Ender

4

Bình thường, 32

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

Dùng thử tại đây hoặc chạy Test Suite

Mỗi dòng có một số dấu cách. Điều này hoạt động bằng cách áp dụng .rđó là xoay vòng tích hợp cho từng dòng của chuỗi. Phép quay lấy từng ký tự trong chuỗi khớp với một trong đối số khác "\|/__"và thay thế nó bằng ký tự tiếp theo. Dấu gạch dưới kép độc đáo ngăn chặn dấu gạch dưới trở thành dấu gạch chéo ngược. Các chuỗi cũng được đệm dựa trên chỉ số của họ.

Khi đã xong, các dòng được nén lại với nhau, sau đó chúng tôi lọc ra từng cột chỉ chứa khoảng trắng, cho đến khi một trong số chúng không có. Sau đó, chúng tôi giải nén và tham gia vào dòng mới.


4

MATL , 38 33 29 byte

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

Các dòng đầu ra có khoảng trắng ở cuối để khớp với dòng dài nhất (điều này được cho phép bởi thử thách).

Đầu vào là một mảng ô (danh sách) của chuỗi. Mảng sử dụng dấu ngoặc nhọn và chuỗi sử dụng dấu ngoặc đơn như sau (nhấp vào từng liên kết để Thử trực tuyến! ).

  • Ví dụ đầu tiên :

    {'/\/\/\    /\/\/\      /\/\/\    /\/\/\'  ' /\    /\  /\    /\  /\        /\'  '  /\/\/\    /\/\/\    /\        /\  /\/\' '   /\        /\        /\        /\    /\' '    /\        /\          /\/\/\    /\/\/\'}
    
  • Ví dụ thứ hai :

    {'_|_|_|    _|_|_|      _|_|_|    _|_|_|' '_|    _|  _|    _|  _|        _|      ' '_|_|_|    _|_|_|    _|        _|  _|_|' '_|        _|        _|        _|    _|' '_|        _|          _|_|_|    _|_|_|'}
    
  • Ví dụ thứ ba :

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

Giải trình

Các mảng ban đầu được lật. Mỗi chuỗi được xử lý trong một vòng lặp và chuỗi được sửa đổi được đẩy lên ngăn xếp. Xử lý bao gồm thay thế các ký tự và nối thêm một số khoảng trắng. Số lượng khoảng trắng bằng với số phần tử hiện tại trong ngăn xếp (nhờ thực tế là mảng đã được lật).

Sau vòng lặp, các chuỗi được thu thập trong một mảng, được lật ngược lại, chuyển đổi thành mảng char 2D và xử lý các khoảng trắng hàng đầu không mong muốn: các không gian hàng đầu có mặt trong tất cả các hàng của mảng char 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

JavaScript (ES6), 171 149 148 byte

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)]))

Chấp nhận và trả về các dòng dưới dạng một chuỗi các chuỗi.

Chỉnh sửa: Đã lưu 22 byte nhờ @ user81655. Đã lưu 1 byte bằng cách nhận ra rằng đầu vào bị giới hạn trong 5 ký tự \|/_và khoảng trắng.


replaces có thể được kết hợp thành .replace(/[\\|/]/g,m=>"|/_"["\\|/".indexOf(m)]), match(/ */)có thể match` *`, hai maps đầu tiên có thể được kết hợp thành a.map(s=>(t=' '.repeat(--i)+s,(l=t.match` *`[0].length)<n?n=l:l,t),..., dấu ngoặc đơn bên ngoài ( (a=...)) bây giờ có thể được loại bỏ. 149 byte: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 Wow, cảm ơn! (Sau đó, tôi phần nào làm hỏng nó bằng cách đánh một byte khỏi bạn replace.)
Neil

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.