本文へスキップ
totonoe.tech

難解プログラミング言語を整える

中級

Brainf*ckを整える

= たった8命令だけの言語を、1命令ずつ動かして仕組みを見る

サンプル(クリックでエディタに入れる)

CODE(> < + - . , [ ] 以外の文字は無視されます) 入力するだけ・送信ゼロ

OUTPUT

「実行」を押すと、ここに出力が出ます。

STEP EXECUTION

1命令ずつ、テープとポインタの動きを見る

実行中のコード(コメント除去後・色つきが現在の命令)

テープ(先頭30マス・色つきがポインタの位置)

出力(ステップ実行中の途中経過)

 

TEXT → BRAINFUCK

好きな文字列を出力するコードを作る

「前の文字の文字コードからの差分」だけ + / - を出す、という素朴な方式でコードを組み立てます(1文字=0〜255の範囲に丸めます)。

生成されたコード(0文字)

実行結果(もとの文字列に戻れば成功)

 

早見表

8つの命令、これで全部。

命令 意味
> ポインタを右へ1つ動かす
< ポインタを左へ1つ動かす
+ 今のマスの値を1増やす(255の次は0に戻る)
- 今のマスの値を1減らす(0の前は255に戻る)
. 今のマスの値を文字コードとして出力する
, 1文字入力してマスに書く(このページでは常に「入力なし=0」)
[ 今のマスが0なら、対応する ] の次の命令まで飛ぶ(ループの入口)
] 今のマスが0でなければ、対応する [ の次の命令まで戻る(ループの出口判定)

なぜ8命令だけで、どんな計算もできるのか

Brainfuckが持っているのは「テープ(メモリ)を1マスずつ移動する」「マスの数値を1増減する」「今のマスの値で分岐する(ループ)」「入出力する」の4種類だけです。 でもこの4種類があれば、好きな回数だけ繰り返す(ループ)・条件によって処理を変える(マスが0かどうかで分岐)・好きなだけメモリを使う(テープを移動しながら値を貯める)ができます。

「足し算」プリセットはセル1の値をセル0へ1ずつ移し替えて([<+>-])たし算を、 「掛け算」プリセットはそれを繰り返し行う二重ループでかけ算を実現しています。ループと増減だけで、四則演算はもちろん、原理的にはどんなアルゴリズムでも組み立てられます (計算理論ではこれを「チューリング完全」と呼びます)。書くのが大変なだけで、できないことは(メモリの上限を除けば)ありません。

⚠️ このページのインタプリタはテープ3万マス・8bit(0〜255でラップアラウンド)。ステップ実行には上限(20万ステップ)があり、無限ループでも必ず止まります。 入力命令 , はこのページでは常に「入力なし(0)」として扱います(送信ゼロのため、キーボード等からの入力は受け付けません)。

このツールについて

`> < + - . , [ ]` の8命令だけでできたプログラミング言語。ここではコードを実行するだけでなく、1命令ずつ止めながらテープとポインタの動きを見たり、好きな文字列を出力するコードを自動生成したりできます。

8命令(> < + - . , [ ])だけの言語。実行・1命令ずつのステップ実行(テープ可視化)・文字列→コード自動生成の3本立て。送信ゼロ。

主な機能

  • 実行とステップ実行(テープ先頭30マスの可視化・現在命令のハイライト)
  • 再生/一時停止/1歩/速度スライダー
  • テキスト→Brainf*ck コード自動生成(その場で実行して一致を確認)
  • 8命令の早見表とチューリング完全性の解説
  • プリセット4種(Hello World・A〜Z・足し算・掛け算)・ステップ上限で必ず停止・送信ゼロ

よくある質問

Q. Brainf*ck は本当に8個の命令だけですか?

A. はい。「> < + - . , [ ]」の8文字だけが命令で、ほかの文字はすべて無視されます。そのためコメントを自由に書き込めます。

Q. なぜ8命令だけで何でも計算できるのですか?

A. メモリの移動・数値の増減・条件分岐(ループ)・入出力の4種類がそろっているためです。理論上「チューリング完全」で、書くのが大変なだけで、メモリの上限を除けばできない計算はありません。

Q. 無限ループのコードを動かすとどうなりますか?

A. 20万ステップに達すると自動的に停止します。ブラウザが固まることはありません。

Q. 入力命令「,」を使うとどうなりますか?

A. このページは送信ゼロで入力を受け付けないため、常に0が読み込まれた扱いになります。

Q. テキストからのコード生成はどんな仕組みですか?

A. 前の文字の文字コードからの差分だけを「+」「-」で表す方式です。生成したコードを実行すると元の文字列に戻ることを、その場で確認できます。

入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

KOINOBORI ECOSYSTEM

私たちが運営するサイト