本文へスキップ
totonoe.tech

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

中級

Befungeを整える

= 盤面の上を上下左右に走るプログラムを、ポインタの動きごと眺める

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

BOARD(80列×25行の盤面。はみ出した分は無視されます) 入力するだけ・送信ゼロ

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の「#」以降に入るためサーバーには送信されません。リンクを開くと同じ状態を復元します。

続けて整える

KOINOBORI ECOSYSTEM

私たちが運営するサイト