難解プログラミング言語を整える
中級Befungeを整える。
= 盤面の上を上下左右に走るプログラムを、ポインタの動きごと眺める
サンプル(クリックでエディタに入れる)
OUTPUT
「実行」を押すと、ここに出力が出ます。
STEP PLAYBACK
盤面の上を走るポインタを見る
STACK(上が一番上=次に使われる値)
出力(ステップ再生中の途中経過)
早見表
盤面を走りながら読む、という発想。
| 命令 | 意味 |
|---|---|
| 0〜9 | その数字をスタックに積む |
| + - * / | 足す・引く・掛ける・割る(スタック上位2つ) |
| % | 割った余り(0で割ると0にする) |
| ! | 論理否定(0なら1、それ以外は0にする) |
| ` | 比較(下の値 > 上の値 なら1、それ以外は0) |
| > < ^ v | その向き(右・左・上・下)へ進むように変える |
| ? | 上下左右のどれかへ、ランダムに進む向きを変える |
| _ | 値を1つ取り出し、0なら右へ・それ以外なら左へ進む(横方向の分岐) |
| | | 値を1つ取り出し、0なら下へ・それ以外なら上へ進む(縦方向の分岐) |
| " | 文字列モードを切替。次の " までの文字を1文字ずつスタックに積む |
| : | 一番上の値を複製する |
| \ | 上位2つの値を入れ替える |
| $ | 一番上の値を捨てる |
| . | 一番上の値を数値として出力する(後ろに空白がつく) |
| , | 一番上の値を文字として出力する |
| # | 次の1マスを読み飛ばす(橋) |
| p | 盤面の指定マスへ値を書き込む(プログラム自身を書き換えられる) |
| g | 盤面の指定マスの値を読む |
| & ~ | 数値/文字を入力する(このページでは常に「入力なし=0」) |
| @ | プログラムを終了する |
| (空白) | 何もしない |
ふつうの言語は「プログラムは上から下へ、先に全部を機械語へ翻訳してから実行する」のが前提です。Befungeはポインタが盤面上を走りながら1マスずつその場で読むため、
p でプログラム自身のマスを書き換えることもできてしまいます。「1から10まで数える」プリセットは
|(縦方向の分岐)を使って、盤面の外側(下に行けば止まる・上に行けばループして戻る)へ迂回させることでループを作っています。
⚠️ このページのインタプリタは80×25マス固定・ステップ再生には上限(20万ステップ)があり、無限ループでも必ず止まります。
入力命令 & ~ はこのページでは常に「入力なし(0)」として扱います(送信ゼロのため、キーボード等からの入力は受け付けません)。
このツールについて
ふつうのプログラムは上から下へ1行ずつ読みますが、Befungeはコードの上を読みとるポインタが上下左右に走り回ります。矢印にぶつかると向きが変わり、盤面そのものが迷路になる言語です。実行して、盤面とスタックの動きをステップごとに見てみましょう。
コードが平面の上を上下左右に走り回る言語。実行・ステップ再生(盤面のポインタ+向き+スタックを可視化)・3種のプリセット。送信ゼロ。
主な機能
- 実行とステップ再生(ポインタ・向き・スタックの表示)
- 再生/一時停止/1歩/速度スライダー
- Hello World・カウントループ・乱数迷路のプリセット
- 命令の早見表(Befunge-93)
- 入力命令は入力なし(0)の注記・ステップ上限で必ず停止・送信ゼロ
よくある質問
Q. なぜプログラムが盤面を走り回るのですか?
A. 1993年に Chris Pressey 氏が「コンパイルしにくい言語」を目標に作ったためです。「> < ^ v」の矢印にぶつかると進む向きが変わり、盤面そのものが実行経路になります。
Q. 盤面のサイズは何マスですか?
A. 80列×25行(Befunge-93 の仕様)です。それを超える部分は無視され、端まで行くと反対側から出てきます。
Q. 「?」はどんな命令ですか?
A. 上下左右のどれかへランダムに向きを変える命令です。「乱数迷路」のプリセットは実行するたびに出力が変わります。
Q. 入力命令「&」「~」はどうなりますか?
A. このページは送信ゼロで入力を受け付けないため、常に0が積まれた扱いになります。
Q. ステップ再生でスタックはどう見ればよいですか?
A. スタック欄に、いちばん上(次に使われる値)が上に来るように表示されます。数値の増減・比較・出力のたびに変化を追えます。
入力値はURLの「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。