Brain StudioでBrainf*ckを学んでみる
Brainf*ck
というプログラミング言語を知っていますか?難解プログラミング言語の代表的なものの1つで書いてると脳ミソがフ〇ックされたように感じることからその名前がついていると思われます。
Brainf*ck
はなんと8個の命令しかなく、それを8個の記号で記述します。
1.なんだかよくわからないですね(コナミ感)。>
ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;
」に相当する。
2.<
ポインタをデクリメントする。C言語の「ptr--;
」に相当。
3.+
ポインタが指す値をインクリメントする。C言語の「(*ptr)++;
」に相当。
4.-
ポインタが指す値をデクリメントする。C言語の「(*ptr)--;
」に相当。
5..
ポインタが指す値を出力に書き出す。C言語の「putchar(*ptr);
」に相当。
6.,
入力から1バイト読み込んで、ポインタが指す先に代入する。C言語の「*ptr=getchar();
」に相当。
7.[
ポインタが指す値が0なら、対応する]
の直後にジャンプする。C言語の「while(*ptr){
」に相当。
8.]
ポインタが指す値が0でないなら、対応する[
(の直後[1])にジャンプする。C言語の「}
」に相当[2]。 https://ja.wikipedia.org/wiki/Brainfuck#Brainfuck%E3%81%AE%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98
↓は
Brainf*ck
で書かれた「Hello World!」です。
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.[-]>++++++++[<++
++>-]<.>+++++++++++[<+++++>-]<.>++++++++[<+++>-]<.+++.------.--------.[-]>
++++++++[<++++>-]<+.[-]++++++++++.
…理解できる気がしないですね。Microsoftストアにこの
Brainf*ck
を実行するためのアプリがあるため、使いながら構文を覚えてみようと思います。
インストール
Brain Studioをストアアプリからインストールするだけですぐに使えるようになります。使い方
UIはシンプルです。コード入力エリアに
Brainf*ck
コードを入力して右上の実行ボタンを押せば、標準出力エリアに実行結果がでます。メモリが汚れて結果がおかしくなったら、ゴミ箱ボタンを押すとリセットされます。
Inputタブもあるので、標準入力も受け取れそうです。
左上のハンバーガーアイコンから外部ファイルに保存したり、それを読み込んだりもできます。
下部のツールのVirtual Keyboardをオンにすると、
Brainf*ck
で使う8つの記号を入力できるボタンが出てきます。また、その下の入力欄は入力した文字のASCIIコードを表示してくれます。
後述しますが、この言語のコードを書くには大変助かる機能です。
Brainf*ckを書いてみる
それでは命令を読み解きながら書いていきましょう。ポインタがC言語のポインタと同じ意味なら、メモリ空間のアドレスを指し示すものだと思われます。
アドレスに入っている値を操作した結果をASCIIコードに対応する文字として出力するということですね。
なので、「1」のASCIIコードは「49」のため、
+++++++++++++++++++++++++++++++++++++++++++++++++.
+
を49個並べて.
で出力すれば「1」が出力されます。+++++++++++++++++++++++++++++++++++++++++++++++++.+.+.-.-.
このように書けば結果は「12321」ですね。+
をただ並べるだけだとASCIIコードが大きくなればなるほど、コードが長くなってしまいます。ひどく直感的でないですが、
[]
を使うと繰り返しが書けます。
+++++++[>+++++++<-]>.
このコードも結果は「1」を出力します。7の加算を7回繰り返して出力したことになります(よくわからんけど)。
頑張って
Brainf*ck
という文字列を出力してみます。ASCIIコードは66 114 97 105 110 102 42 99 107です。
+++++++++++[>++++++<-]>.[>++<-]>------------------.-----------------.++++++++.+++++.--------.>++++++[>+++++++<-]>.[>++<-]>+++++++++++++++.++++++++.
B
11×6で66r
2掛けして、18引いて114a
17引いて97i
8足して105n
5足して110f
8引いて102*
ポインタを進めて6×7で42c
2掛けして、15足して99k
8足して107名前の通り書いてるとだんだん頭がおかしくなります…。
ジョーク言語のようなものなので、知ってても何の飯の種にもならないですが、話のネタくらいにはなるでしょう。
繰り返しやポインタ移動をうまく使うとエレガント?な
Brainf*ck
コードが書けるのでコードゴルフをやってみるのも一興かも…。Let’s brain f*ck!
後日談
ブラウザ版実行環境を見つけました。Brainfuck Online Simulator
ディスカッション
コメント一覧
まだ、コメントがありません