難解プログラミング言語を整える
中級Brainf*ckを整える。
= たった8命令だけの言語を、1命令ずつ動かして仕組みを見る
サンプル(クリックでエディタに入れる)
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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。