模組:Sandbox/あめろ/Brainfuck/doc
此頁面為 Module:Sandbox/あめろ/Brainfuck 的說明文件
執行Brainfuck程序。
用法
參數1為代碼。代碼中,除+、-、<、>、[、]、,和.之外的字符都將被忽略。
參數2為輸入。輸入的內容將按字節而非Unicode碼位讀取。輸入的內容末尾會被添加-1 (0xFF)作為EOF。
返回程序的輸出。
示例
Hello, World!
輸出「Hello, World!」。[1]
{{User:あめろ/Brainfuck|
+[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+.
}}
執行結果:Hello, World!
字母小寫化
花了一夜肝出來的,水平不好。
{{User:あめろ/Brainfuck|1=
[由於內存單元初始是0,這對方括號里的代碼(+-<>[],.)會被跳過,所以可以當作文檔注釋。
該程序實現了將輸入的內容中的大寫字母轉換為對應小寫字母,而其它字符不變。]
MEM: zero zero charIn
^ 0 0 0
>>(charIn),+[- 讀取字符,當字符不是EOF時進入循環
將charIn減'A',並複製為兩份:charCpy在下一段用,charOut在最終輸出的時候用。
MEM: charOut charCpy charIn counter
0 0 ^ X 0
>(counter)++++++++[<-------->-]<- charIn減'A'的ASCII碼65 (8 * 負8 減 1)
(charIn)[<+<+>>-] 複製charIn到charCpy和charOut中
判斷是charCpy否小於等於26,若是,則isLT26非0。
MEM: charOut charCpy isLT26 temp doesDec
X X ^ 0 0 0
>(temp)+++++[<+++++>-]<+ isLT26 = 26 (LT: less than)
<(charCpy)[
>(isLT26)[>(temp)+>(doesDec)[-]+<<-]
>(temp)[<+>-] 上一行和此行:isLT26非0時,使doesDec為1
>(doesDec)[<<->>-] 若doesDec,則isLT26減1、doesDec減1
<<<(charCopy)- charCopy減1
]
如果是小寫字母,輸出對應大寫字母;否則輸出本身。
MEM: charOut counter isLT26
X ^ 0 B
>(isLT26)[ isLT26非0時
<(counter)++++[<++++++++>-] charOut加32 (4 * 8)
>(isLT26)[-] 將isLT26清零,以退出循環
]
<(counter)++++++++[<++++++++>-]<+ charOut加65 (8 * 8 加 1)
(charOut).[-] 輸出並清零
MEM: zero zero charIn
^ 0 0 0
>>(charIn),+ 讀取下一個字符
]
|2=ABcdEf123}}
去掉注釋:
{{User:あめろ/Brainfuck|
>>,+[->++++++++[<-------->-]<-[<+<+>>-]>+++++[<+++++>-]<+<[>[>+>[-]+<<-]>[<+>-]>[<<->>-]<<<-]>[<++++[<++++++++>-]>[-]]<++++++++[<++++++++>-]<+.[-]>>,+]
|ABcdEf123}}
執行結果:abcdef123