Whitespace에서 골프를 할 때 어떤 일반적인 팁이 있습니까? 코드 골프 문제에 적용 할 수 있고 공백과 관련이있는 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다).
답변 당 하나의 팁을 게시하십시오.
Whitespace에서 골프를 할 때 어떤 일반적인 팁이 있습니까? 코드 골프 문제에 적용 할 수 있고 공백과 관련이있는 아이디어를 찾고 있습니다 (예 : "댓글 제거"는 답이 아닙니다).
답변 당 하나의 팁을 게시하십시오.
답변:
나는 이것이 농담 질문인지 아닌지 완전히 확신하지 못하기 때문에 진지하게 받아들이려고 조롱하지 않기를 바랍니다.
스펙은 프로그램이 세 개의 줄 바꿈으로 끝나야하는데 [LF][LF][LF]
, 첫 번째는 흐름 제어 IMP이고 다음 두 가지는 quit 명령이지만 많은 인터프리터는 적절한 종료없이 코드를 실행합니다. 모든 프로그램에서 3자를 저장합니다.
루프를 계산할 때 힙을 많이 사용했지만 실제로는 매우 비효율적이라는 것을 깨달았습니다. 먼저 주소 푸시, 현재 카운트 가져 오기, 가져 오기 / 추가, 주소 다시 푸시 등
이제 스택의 값을 밀어 루프 카운터로 작동 한 다음 [Space][LF][Tab]
swap 명령을 사용하여 필요할 때 다시 가져옵니다. 작업 / 주변에 많은 작업이 필요하지만 얻을 때 실제로 문자 수를 줄일 수 있습니다.
[LF][Space][Space][LF]
(흐름 제어-레이블이 ''인 마크)는 점프 또는 서브 루틴 호출에 유효한 대상인 빈 레이블을 작성합니다. 이렇게하면 레이블을 선언 할 때 바이트와 레이블이 호출 될 때마다 바이트가 저장됩니다.
Hello World 챌린지에 대한 그의 답변에 비슷한 접근 방식을 사용하는 @LukStorms 에게 감사의 말 을 전합니다 .
( STN
각각 스페이스, 탭 및 줄 바꾸기에 사용됩니다.)
문자의 값을 푸시하는 것은 항상 11 바이트입니다 (즉, 문자 'A'의 경우 값 65를 SSSTSSSSSTN
누르는 것 ; 문자 'z'의 경우 값 122를 누르는 것임 SSSTTTTSTSN
). 많은 양의 텍스트를 출력하려면 비용이 많이들 수 있습니다. 대신, 인쇄하려는 모든 문자의 값을 일정량만큼 낮게 한 다음 루프에서 인쇄하여 고정 된 양을 추가 할 수 있습니다.
이것은 다음 코드로 수행 할 수 있습니다 (이 경우 고정 값이 100이라고 가정하십시오).
NSSN
(Label_0 생성, 기본적으로 루프 시작)
SSSTTSSTSSN
(고 정량 100을 누릅니다)TSSS
스택의 상위 2 개 값을 함께 추가하십시오.TNSS
(지금 올바른 값을 문자로 표시하고 인쇄하십시오)NSNN
(Label_0으로 이동; 루프의 다음 반복으로 이동)이것은 스택에 더 이상 아무것도 하지 않고 Add ( )를 시도하자마자 오류 ( 메타에 따라 허용됨 )로 프로그램을 중지합니다 TSSS
. 나는 이것을 사용하여 내 대답을 골프화했습니다 ( 바이트 수를 낮추기 위해했던 것들 5 및 6 참조 ).
고 정량 100이 가장 짧은 방법인지 여부는 인쇄 대상에 따라 다릅니다. 예를 들어 @LukStorm 은 Hello World 답변에 107을 사용했습니다.
in SNS
같은 같은 두 개의 인접한 문자에 대한 상위 값 ( )을 복사 하거나 다른 위치에서 값을 복사 하여 더 많은 바이트를 골프에 사용할 수 있습니다.l
Hello
이것은 구현 고유의 행동을 시작하지만 이것이 허용 된다고 생각 합니다 .
존재하지 않는 레이블로 이동하려고하면 TIO (및 다른 인터프리터는 적어도 IDE에서 작동하지 않음)가 실행을 중지합니다. 루프에서 벗어나기 위해 비교를 수행해야하는 경우 나누기 레이블을 선언하지 않고 바이트를 절약 할 수 있습니다. ( 예를 들어 보이지 않는 텍스트 인쇄에 대한 내 의견을 참조하십시오 .)
( STN
각각 스페이스, 탭 및 줄 바꾸기에 사용됩니다.)
STS
+ 숫자 인수를 사용 하여 스택 의 n 번째 항목 (인수가 제공 한)을 스택의 맨 위에 복사 할 수 있습니다 . 경우에 따라 바이트를 저장하는 데 사용될 수 있습니다.
예를 들어, 이 대답 에 대해서는 4 번째 항목에서 설명했습니다 .1 번째 (0 인덱싱 된) 값 ( STSSTN
)을 복사하는 것이 12를 눌러 문자 'p'( SSSTTSSN
) 를 만드는 것보다 짧은 바이트 수를 줄이려고했습니다. "pop"
출력 의 일부 에서. (참고 : 문자 'p'에 112 대신 112 값 12를 사용합니다. 왜냐하면 모든 값을 고정 된 양만큼 낮추는 다른 팁을 적용했기 때문에 루프에서 문자를 인쇄하기 전에 추가했습니다 .)