MATL , 56 53 byte
:"'!!((!((!!#*```).?p0```!!!]'8eP!P]'p(.' '.a-'XE&hqc
Hãy thử trực tuyến!
Giải trình
Dê thức
Dê thức tỉnh có thể được đóng gói vào chuỗi
'' '' ")___(->o/___ \
và giải nén như sẽ được giải thích trong thời gian ngắn. Tuy nhiên, các ký hiệu trích dẫn đơn sẽ cần được sao chép để thoát chúng, do đó, chuỗi ký tự sẽ phải được định nghĩa là (lưu ý các ký hiệu trích dẫn đơn kèm theo và sao chép của các ký hiệu gốc):
' '''' '''' ")___(->o/___ \'
Để lưu byte, chúng tôi xác định chuỗi bằng các ký tự một điểm mã ở trên , do đó tránh trùng lặp. Chuỗi ký tự trở thành
'!!((!((!!#*```).?p0```!!!]'
Khi kết thúc mã, chúng tôi sẽ trừ 1 và chuyển đổi thành char. (Chúng ta có thể làm điều đó ngay bây giờ, ngay sau chuỗi ký tự; nhưng để lại cho đến cuối sẽ lưu một bản sao trích dẫn đơn khác, như chúng ta sẽ thấy).
Để giải thích cách giải nén chuỗi, chúng tôi sẽ làm việc với các ký tự gốc (được tạo ra ở cuối mã bằng cách trừ 1), vì vậy giải thích dễ thực hiện hơn. Trước tiên chúng tôi định hình lại chuỗi
'' '' ")___(->o/___ \
thành một mảng char 2D 8 hàng, theo thứ tự chính cột (xuống, sau đó qua). Điều này sẽ tự động đệm cột cuối cùng với char 0 (ở cuối mã, trừ đi 1 sẽ chuyển đổi nó thành số −1, được chuyển đổi thành char cho lại char 0). Char 0 được hiển thị dưới dạng khoảng trắng. Vì vậy, hiệu quả chúng tôi đang đệm với không gian. Kết quả của việc định hình lại là
>
"o\
')/
'__
__
'__
'(
-
Bây giờ chúng ta lật theo chiều dọc:
-
'(
'__
__
'__
')/
"o\
>
và sau đó hoán vị và lật theo chiều dọc một lần nữa để tạo ra con dê tỉnh táo:
\
___/o>
-(___)"
'' ''
Hai thao tác lật là cần thiết vì chuỗi đóng gói ban đầu là "ngược lại". Điều này là để khai thác thực tế là mảng char 2D thực tế đại diện cho con dê có 6 khoảng trống ban đầu ở hàng đầu tiên, nó sẽ tự động được điền bằng cách đệm khi chuỗi được định hình lại thành mảng 2D 8 hàng. Nhưng phần đệm được thực hiện ở cuối (không bắt đầu) của cột cuối cùng (không phải hàng), do đó lật và chuyển vị.
Dê ngủ
Một con dê ngủ được tạo ra từ một con dê tỉnh táo bởi ký tự chuyển ngữ o
, '
, -
vào -
, `
, ,
tương ứng. Trên thực tế, vì việc chuyển đổi một mã điểm trên, chúng tôi transliterate chars p
, (
, '
vào .
, a
, -
, mà một lần nữa cứu chúng ta khỏi phải lặp lại các biểu tượng đơn báo giá. Đây là lý do tại sao thao tác trừ một được để lại cho đến cuối chương trình.
Cấu trúc mã
- Tạo
N
thời gian dê tỉnh táo , làm việc với các điểm mã tăng thêm 1.
- Biến con dê cuối cùng thành một con dê đang ngủ.
- Nối tất cả các con dê theo chiều ngang. Trừ 1 để mã điểm và chuyển sang char.
Mã nhận xét
: % (Step 1) Implicitly input N. Push range [1 2 ... N]
" % For each (i.e. repeat N times)
'!!((!((!!#*```).?p0```!!!]' % Push this string. Quotes are escaped by duplicating
8e % Reshape into an 8-row 2D array of char, in
% column-major order, padding last column with
% char 0
P % Flip vertically
!P % Transpose and flip vertically
] % End
'p(.' % (Step 2) Push this string: source for transliteration
'.a-' % Push this string: target for transliteration
XE % Transliterate. Transforms last goat into sleeping
&h % (Step 3) Horizontally concat all 2D char arrays
qc % Subtract 1 and convert to char. 0 becomes −1, which
% is converted to char 0, which is displayed as a space
% Implicitly display