模組:Sandbox/あめろ/Brainfuck/doc
< Module:Sandbox | あめろ | Brainfuck
跳至導覽
跳至搜尋
此頁面為 Module:Sandbox/あめろ/Brainfuck 的說明文件
執行Brainfuck程序。
用法
參數1
為代碼。代碼中,除+
、-
、<
、>
、[
、]
、,
和.
之外的字符都將被忽略。
參數2
為輸入。輸入的內容將按字節而非Unicode碼位讀取。輸入的內容末尾會被添加-1 (0xFF)
作為EOF。
返回程序的輸出。
示例
Hello, World!
輸出「Hello, World!」。[1]
{{User:あめろ/Brainfuck| +[-->-[>>+>-----<<]<--<---]>-.>>>+.>>..+++[.>]<<<<.+++.------.<<-.>>>>+. }}
執行結果:User:あめろ/Brainfuck
字母小寫化
花了一夜肝出來的,水平不好。
{{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}}
執行結果:User:あめろ/Brainfuck