MATL , 24 바이트
:"ct32>*TTYatFTEqYSy~*+c
입력 형식은
2
{'X X DD', ' X D D', 'X X DD'}
다른 예는
1
{'###', '###'}
출력에 추가 공백이 포함되어 있으며이 공백은 챌린지에 의해 허용됩니다.
온라인으로 사용해보십시오!
2D char 배열이 입력으로 허용 가능한 경우 (OP에 두 번 요청했습니다 ...) 첫 번째 바이트를c
제거 할 수 있으므로 23 바이트 :
:"t32>*TTYatFTEqYSy~*+c
이 경우 입력 형식은 다음과 같습니다 (모든 문자열의 길이가 동일하므로 공백이있는 오른쪽 여백이 필요할 수 있음).
2
['X X DD '; ' X D D'; 'X X DD ']
온라인으로 사용해보십시오!
설명
: % Input number n implicitly. Generate [1 2 ... n]
" % For loop: repeat n times
c % Convert to char array. In the first iteration it inputs a cell array of
% strings implicitly and converts to a 2D char array, right-padding with
% spaces. In the next iterations it does nothing, as the top of the stack
% is already a 2D char array
t32>* % Convert characters below 32 into 0
TT % Push array [1 1]
Ya % Pad the 2D char array with one zero in the two directions (up/down,
% left/right), on both sides
t % Duplicate
FTEq % Push array [-1 1]
YS % Circularly shift the 2D char array one unit up and one unit right
y % Push a copy of the non-shifted 2D array
~ % Logical negate: nonzero entries become 0, zero entries become 1. This
% will be used as a mask for entries that need to be changed. Since the
% values at those entries are zero, we can simply add the new values. We do
% that by multiplying the mask by the shifted array and adding to the
% non-shifted array
* % Multiply element-wise
+ % Add element-wise
c % Convert the 2D array back to char
% End for
% Implicitly display