스페이스와 탭 사이에서 거룩한 전쟁이 벌어졌습니다. (물론 객관적으로 우월한 공간도 승리했습니다.) — Alex A.
S는 오메 PEO의 P 르가 여전히 거부 에 것을 ccept WHI C의 H는 Cl이고 , E는 흘리 이야 upreme한다. 당신은받은 incor을 사용하여 파일을 재 CT를, B의 광고 및 INF 전자 WHI의 rior 양식 t 이스 페이스를 지금 마에 그에게 계속 전자 파일의 국세청 r에 전자가 오염과 파괴를.
귀하는 파일을 보낸 사람에게 자신이 얼마나 잘못되었는지 보여줄 수도 있습니다.
기술
제목에서 알 수 있듯이 하나 이상의 탭이 포함 된 파일을 가져와야합니다.
this is an evil tab onoes
무자비하게 조각으로 산산이 부서집니다.
this is an evil tab
o
n
o
e
s
Stack Exchange 소프트웨어는 리터럴 탭을 네 개의 공백으로 변환하므로 (올 바르기 때문에)이 게시물 내의 탭은 네 개의 공백으로 표시됩니다. 그러나 프로그램 입력에는 실제 탭이 포함됩니다.
도전
솔루션은 단일 문자열을 입력으로 사용해야하며 인쇄 가능한 ASCII, 줄 바꿈 및 탭이 포함될 수 있습니다. 입력에는 항상 하나 이상의 탭이 있습니다.
다음 규칙이 적용되는 출력은 동일한 문자열이어야합니다.
좌표 (0,0)에서 오른쪽 방향으로 커서를 시작하십시오. 좌표는 (열, 행), 인덱스가 0이며 방향은 문자를 인쇄 한 후 커서를 움직여야하는 방향입니다.
문자열의 각 문자에 대해 :
줄 바꿈 인 경우 좌표 (0, n)으로 이동하십시오. 여기서 n은 문자열의 줄 바꿈 수입니다 (이 것을 포함하여). 방향을 오른쪽으로 재설정하십시오.
탭인 경우 두 공간을 출력 하고 커서 방향을 시계 방향으로 90도 회전 한 다음 두 공간을 더 출력하여 탭을 효과적으로 "반으로 나누십시오". 다음은 탭이 다음과 같이 표시되는 시각적 예입니다.
--->
되고 공백을·
.foo--->bar--->baz
된다
foo··· · b a r · · zab··
그렇지 않으면 커서에서 문자를 출력하고 커서를 현재 방향으로 한 단계 이동합니다.
문자열을 처음부터 끝까지 읽고 있기 때문에 기존 문자의 "맨 위에"를 써야 할 수도 있습니다. 예를 들어, 입력
foo--->bar
spaces are superior
의 결과를 산출해야한다
foo
b
spaces are superior
r
"깨진 탭"이 다른 문자를 덮어 쓸지 여부를 선택할 수 있습니다. 원래 의도는 그렇지 않았지만 사양이 모호했기 때문에 이것이 귀하의 결정입니다.
또한 이러한 규칙을 적용한 후에도
원하는만큼 후행 공백을 추가하거나 제거하십시오.
최대 하나의 후행 줄 바꿈을 추가하십시오.
입력은 절대 공백이 포함 되지 않습니다 . 또한 선행 또는 후행 줄 바꿈이 포함되지 않습니다. 또한 열이나 0보다 작은 행에 쓸 필요가 없다고 항상 가정 할 수도 있습니다 (예 : 화면 밖).
테스트 사례
이 테스트 사례의 탭은 --->
SE가 그렇지 않기 때문에 .
입력:
Test case. Here's a tab--->there's a tab--->everywhere a tab--->tab--->this is some more text
blah
blah
blah blah blah blah blah blah--->blaah--->blaah--->blah--->blaaaaah--->blah--->blah--->blah--->blah--->blah
산출:
Test case. Here's a tab
blah
blah t
blah blah blah blah blah blah
blaablah
r b
e l b
h 'h a l
a sa a a
l l h h
this is some mobe tbxt
haalhalb
b a
a b
t
bat a erehwyreve
멋진 애니메이션 :
규칙
- 이것은 code-golf 이므로 바이트 단위의 가장 짧은 코드가 이길 것입니다!
(0,0)
먼저 콘솔을 지우 야합니까, 아니면 커서의 기본 위치를 의미합니까?