GNU가 나오지 , 178 (158) 132 + 1 = 133 바이트
-r
플래그의 경우 +1 바이트
s/(.)(.*)(.)/ \1\n\2;\3/
:
s/( *)(.\n.)(.*)(...);(.*)(.)/\1\2\1 \6\n\3;\4\5/m
t
:A
s/(.*\n)( *)(.*);/ \2;\1\2\3/m
tA
s/. (.)$/\1/gm
온라인으로 사용해보십시오!
설명
이전 버전 에서는 직관적으로 피할 수 있다고 확신했지만 수학, 특수 사례 및 정리를 처리하는 데 많은 바이트를 사용했습니다. 그 이후로는 대부분 그렇게하였습니다.
입력이 있다고 가정하자 abcdEFGHIJKLMnop
. 글자 EFGHIJKLM
는 삼각형의 밑면이 될 것이므로 시각 자료로 대문자로 표기했습니다.
먼저 첫 번째 문자를 공백으로 ;
시작하고 마지막 문자 앞에 커서 ( )를 삽입하여 입력을 준비합니다 .
s/(.)(.*)(.)/ \1\n\2;\3/
이제 우리는 :
a
bcdEFGHIJKLMno;p
이제 루프에서 마지막 줄에 몇 가지 작업을 수행 할 것입니다. 1. 이전 줄에서 공백을 복사하고 첫 문자 뒤에 공백을 두 개 더한 다음 삽입합니다. 2. 마지막 문자를 공백 바로 다음으로 이동 한 다음 줄 바꿈을 입력하십시오. 3. 커서를 왼쪽으로 세 문자 이동하십시오.
:
s/( *)(.\n.)(.*)(...);(.*)(.)/\1\2\1 \6\n\3;\4\5/m
t
각 반복의 결과는 다음과 같습니다.
a
b p
cdEFGHIJKL;Mno
a
b p
c o
dEFGHI;JKLMn
a
b p
c o
d n
EF;GHIJKLM
피라미드 모양이 시작되는 것을 볼 수 있습니다. 또한 커서의 용도를 볼 수 있습니다. 각 반복에서 3 문자 왼쪽으로 이동했으며 더 이상 왼쪽 문자가 3 개가 없으면 루프가 끊어지며 이는 "하단"에 도달했을 때 발생합니다 피라미드의.
이제 비슷한 작업을 수행하지만 그 반대의 경우도 마찬가지입니다. 루프에서 커서를 사용하여 줄의 시작 부분에서 이전 줄의 시작 부분으로 공백을 복사하고 그 줄에서 커서를 위로 이동하는 과정에서 1을 더합니다.
:A
s/(.*\n)( *)(.*);/ \2;\1\2\3/m
tA
다음은 몇 가지 반복과 최종 결과입니다.
a
b p
c o
;d n
EFGHIJKLM
a
b p
;c o
d n
EFGHIJKLM
...
; a
b p
c o
d n
EFGHIJKLM
추가 문자를 제외한 모든 작업이 완료 ;
되었습니다. 첫 번째 줄에는 A 와 여분의 공백이 있고 다음 세 줄에는 피라미드의 "중간"에 두 개의 공백이 있습니다. 간단한 대체물이 제거됩니다.
s/. (.)$/\1/gm
다 했어요!
a
b p
c o
d n
EFGHIJKLM
✂
?