Spasi , 140 byte
[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]
Huruf S(spasi), T(tab), dan N(baris baru) ditambahkan hanya sebagai penyorotan.
[..._some_action]ditambahkan sebagai penjelasan saja.
70 spasi, 37 tab, dan 33 baris baru yang digunakan.
Biasanya saya menggunakan Buat Label dalam urutan NSSN, NSSSN, NSSTN, NSSSSN, NSSSTN, NSSTSN, NSSTTN, dll Tapi karena mencetak nomor di mana biner S=0/ T=1digunakan mempengaruhi jumlah saya perlu output, saya menggunakan label NSSN, NSSSN, NSSTN, dan NSSSTNsebagai gantinya, yang memberikan jumlah sempurna spasi / tab yang akan dicetak dengan angka biner SSSTSSSSTN(33; jumlah baris baru), SSSTSSTSTN(37; jumlah tab), dan SSSTSSSTTSN(70; jumlah spasi).
Penjelasan dalam pseudo-code:
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
Contoh berjalan:
Input: spasi
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
Program berhenti dengan kesalahan: Tidak ada jalan keluar yang ditentukan.
Cobalah online (dengan spasi, tab, dan hanya baris baru).
Masukan: tab
STDIN akan menjadi \t( 9) sebagai gantinya, dalam hal ini akan menjadi 0pada If 0cek pertama , pergi ke LABEL_TAB/ NSSSTN, dan akan mendorong dan mencetak37 sebagai gantinya.
Cobalah online (dengan spasi, tab, dan hanya baris baru).
Input: baris baru
STDIN akan menjadi \n( 10) sebagai gantinya, dalam hal ini akan 0di If 0cek kedua , pergi ke Label_NEWLINE/ NSSSN, dan akan mendorong dan mencetak 33sebagai gantinya.
Cobalah online (dengan spasi, tab, dan hanya baris baru).
Input: apa pun
Input-karakter lain akan dilakukan NSTN(Langsung ke Label_PRINT) setelah If 0pemeriksaan ketiga , mencetak 0yang masih di tumpukan (yang telah kami duplikasi di awal).
Cobalah online (dengan spasi, tab, dan hanya baris baru).