發布時間: June 28, 2024, 7:58 a.m. 最後更新時間: June 28, 2024, 10:24 a.m. 時間限制: 1000ms 記憶體限制: 128M
Brainfuck,簡稱BF,是一種極小化的程式語言,由Urban Müller在1993年創造。而因為Fuck是髒話,所以這種語言有時稱為Brainf*ck或Brainf***,或者是我個人偏好的Brainfxxk。
Müller的目標是建立一種簡單的、可以用最小的編譯器來實現的、符合圖靈完全思想的程式語言。這個語言由八種運算子構成,為Amiga機器編寫的編譯器(第二版)只有240個位元組大小。
Brainfuck 的名字已經暗示出來,它的程式代碼很難讀懂。儘管如此,Brainfuck仍然可以像普通程式語言一樣一般完成任何計算。它雖然計算方式不能說與眾不同,只能說鶴立雞群,但確實能夠正確執行。
這種語言基於一個簡單的機器模型。這個機器除了指令以外,還包括:一個以位元組為單位、已初始化為零的陣列、一個指向該陣列的指標(開始時指向陣列的第一個位元組)、以及用於輸入輸出的兩個位元組流。
下面是這八種狀態的描述,其中每個狀態由一個字元標識:
> 指標加一(右移一格)
< 指標減一(左移一格)
+ 指標所指位元組的值加一
- 指標所指位元組的值減一
. 輸出指標所指位元組內容(ASCII碼)
, 向指標所指的位元組輸入內容(ASCII碼)
[ 若指標所指位元組的值為零,則向後跳轉,跳轉到其對應的]的下一個指令處
] 若指標所指位元組的值不為零,則向前跳轉,跳轉到其對應的[的下一個指令處
用白話文來說,Brainfuck的世界就是一條長長的一維陣列和一個箭頭。這個箭頭初始在第一格,且陣列的值初始皆為0。
Brainfuck指令可以逐一替換,翻譯成C語言(假設ptr是char *類型)的語句之類:
> 將箭頭右移一格;
< 將箭頭左移一格;
+ 將箭頭指的這格數字加一;
- 將箭頭指的這格數字減一;
. 輸出這格的數字在ASCII碼中對應哪個字;
先這樣就好。給個例子吧:如何印出"Hello World!"呢?
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
很簡單,非常易懂,便於閱讀,是個值得所有人學習的好語言。
一串合法的Brainfuck程式。保證沒有',' '[' ']'和換行。
所需陣列大小保證在1000格以內。
解讀輸入並輸出結果。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.++++++++++++++++++++++++++++++..++.++>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-+++++++++++++-.++++++++++++++++++++++++.------.<++-----------.
ZxxzQics