MATL , 56 53 바이트
:"'!!((!((!!#*```).?p0```!!!]'8eP!P]'p(.' '.a-'XE&hqc
온라인으로 사용해보십시오!
설명
깨어있는 염소
깨어있는 염소는 끈에 포장 할 수 있습니다
'' '' ")___(->o/___ \
곧 설명 할대로 포장을 풉니 다. 그러나 작은 따옴표 기호는 이스케이프를 피하기 위해 복제 되어야 하므로 문자열 리터럴은 다음과 같이 정의해야합니다.
' '''' '''' ")___(->o/___ \'
바이트를 절약하기 위해 위의 한 코드 포인트 이상의 문자를 사용하여 문자열을 정의 하므로 중복을 피할 수 있습니다. 문자열 리터럴은
'!!((!((!!#*```).?p0```!!!]'
코드가 끝나면 1을 빼고 char로 변환합니다. (문자열 리터럴 바로 다음에 지금 할 수 있지만 끝 부분에 남겨두면 나중에 볼 수 있듯이 작은 따옴표가 중복됩니다.)
문자열의 압축이 풀리는 방법을 설명하기 위해 1을 대체하여 코드 끝에서 생성되는 원래 문자로 작업하므로 설명을 따르기가 더 쉽습니다. 우리는 먼저 줄을 재구성합니다
'' '' ")___(->o/___ \
열 주요 순서 (아래로, 가로로) 로 8 행 2D 문자 배열로 . 이것은 마지막 열을 자동으로 char 0으로 채 웁니다 (코드의 끝에서 1을 빼면 숫자 -1로 변환되어 char로 변환되면 char 0이 다시 나타납니다). 문자 0이 공백으로 표시됩니다. 효과적으로 우리는 공백으로 채워집니다. 모양을 바꾼 결과는
>
"o\
')/
'__
__
'__
'(
-
이제 수직으로 뒤집습니다.
-
'(
'__
__
'__
')/
"o\
>
그런 다음 조옮김 염소를 만들기 위해 다시 세로로 뒤집고 뒤집습니다.
\
___/o>
-(___)"
'' ''
압축 된 원래 문자열이 "역방향"이므로 두 번의 플립 조작이 필요합니다. 이는 염소를 나타내는 실제 2D 문자 배열의 첫 번째 행에 6 개의 초기 공백이 있으며 문자열이 8 행 2D 배열로 재 형성 될 때 패딩으로 자동 채워집니다. 그러나 패딩은 마지막 열 (행이 아닌)의 끝 (시작이 아님)에서 이루어 지므로 뒤집기와 조옮김이 이루어집니다.
잠자는 염소
잠자는 염소 음역 문자에 의해 깨어 염소에서 발생하는 o
, '
, -
에 -
, `
, ,
각각. 사실, 때문에 하나의 코드 포인트 - 위의 변환, 우리는 문자를 음역 p
, (
, '
로 .
, a
, -
, 다시 작은 따옴표 기호를 복제하는 데에서 우리를 절약 할 수있다. 이것이 프로그램의 끝 부분에 빼기 1 연산이 남아있는 이유입니다.
코드 구조
N
코드 포인트가 1 증가 하여 깨어있는 염소 시간을 생성하십시오 .
- 마지막 염소를 잠자는 염소로 바꾸십시오.
- 모든 염소를 수평으로 연결하십시오. 1을 빼면 코드 포인트가 생성되고 char로 캐스팅됩니다.
주석이 달린 코드
: % (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