공백 , 140 바이트
[S S S N
_Push_0][S N
S _Duplicate][S N
S _Duplicate][T N
T S _Read_STDIN_as_character][T T T _Retrieve][S S S T S S T N
_Push_9][T S S T _Subtract][S N
S _Duplicate][N
T S S T N
_If_0_Jump_to_Label_TAB][S S S T N
_Push_1][T S S T _Subtract][S N
S _Duplicate][N
T S S N
_If_0_Jump_to_Label_NEWLINE][S S S T S T T S N
_Push_22][T S S T _Subtract][N
T S T N
_If_0_Jump_to_Label_SPACE][N
S T N
_Jump_to_Label_PRINT][N
S S S T N
_Create_Label_TAB][S S S T S S T S T N
_Push_37][N
S T N
_Jump_to_Label_PRINT][N
S S S N
_Create_Label_NEWLINE][S S S T S S S S T N
_Push_33][N
S T N
_Jump_to_Label_PRINT][N
S S T N
_Create_Label_SPACE][S S S T S S S T T S N
_Push_70][N
S S N
_Create_Label_PRINT][T N
S T _Print_as_integer]
문자 S
(공백), T
(탭) 및 N
(줄 바꾸기)가 강조 표시로만 추가되었습니다.
[..._some_action]
설명으로 만 추가되었습니다.
70 개의 공백, 37 개의 탭 및 33 개의 새로운 줄이 사용되었습니다.
보통 나는 순서대로 만들기 라벨을 사용하여 NSSN
, NSSSN
, NSSTN
, NSSSSN
, NSSSTN
, NSSTSN
, NSSTTN
, 등 그러나 바이너리 숫자 인쇄하기 때문에 S=0
/ T=1
사용하는 I 출력에 필요한 수에 영향을, 내가 레이블을 사용 NSSN
, NSSSN
, NSSTN
, 그리고 NSSSTN
대신 준 이는 이진 숫자 SSSTSSSSTN
(33; 줄 바꿈 양), SSSTSSTSTN
(37; 탭 수) 및 SSSTSSSTTSN
(70; 공백 크기 ) 로 인쇄 할 완벽한 공간 / 탭 .
의사 코드의 설명 :
Character c = STDIN-input as character
If c is a tab:
Print 37
Else if c is a new-line:
Print 33
Else if c is a space:
Print 70
Else
Print 0
예제 실행 :
입력 : 공간
Command Explanation Stack Heap STDIN STDOUT STDERR
SSSN Push 0 [0]
SNS Duplicate top (0) [0,0]
SNS Duplicate top (0) [0,0,0]
TNTS Read STDIN as character [0,0] {0:32} \n
TTT Retrieve [0,32] {0:32}
SSSTSSTN Push 9 [0,32,9] {0:32}
TSST Subtract top two (32-9) [0,23] {0:32}
SNS Duplicate top (23) [0,23,23] {0:32}
NTSSTN If 0: Jump to Label_TAB [0,23] {0:32}
SSSTN Push 1 [0,23,1] {0:32}
TSST Subtract top two (23-1) [0,22] {0:32}
SNS Duplicate top (22) [0,22,22] {0:32}
NTSSN If 0: Jump to Label_NEWLINE [0,22] {0:32}
SSSTSTTSN Push 22 [0,22,22] {0:32}
TSST Subtract top two (22-22) [0,0] {0:32}
NTSTN If 0: Jump to Label_SPACE [0] {0:32}
NSSTN Create Label_SPACE [0] {0:32}
SSSTSSSTTSN Push 70 [0,70] {0:32}
NSTN Jump to Label_PRINT [0,70] {0:32}
NSSN Create Label_PRINT [0,70] {0:32}
TNST Print as integer [0] {0:32} 70
error
프로그램이 오류와 함께 중지됩니다 : 종료가 정의되지 않았습니다.
온라인으로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만).
입력 : 탭
대신 STDIN은 \t
( 9
) 이되며 ,이 경우 0
첫 번째 If 0
검사에서 LABEL_TAB
/ 로 이동하여 대신 NSSSTN
눌렀다가 인쇄 37
합니다.
온라인으로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만).
입력 : 개행
대신 STDIN은 \n
( 10
) 이되며 ,이 경우 0
두 번째 If 0
검사가 진행되고 Label_NEWLINE
/ 로 이동 한 다음 대신 NSSSN
푸시하여 인쇄 33
합니다.
온라인으로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만).
입력 : 다른 것
다른 입력 문자는 NSTN
세 번째 If 0
검사 후에 (Jump to Label_PRINT로) 0
여전히 스택에 있던 것을 인쇄합니다 (처음에는 복제했습니다).
온라인으로 시도하십시오 (원시 공백, 탭 및 줄 바꾸기 만).