Befunge

Befunge は難解プログラミング言語の一つ。手続き型、スタック型で、自己変更的な言語である。実用言語ではない難解プログラミング言語のひとつ。
この言語のプログラムの命令は一次元の列ではなく二次元の格子上に並んでいて、実行する向きを上下左右に変更できる。この言語の任意の1命令は、ソースコード中で1文字で表現される。したがって、ソースコード中の行と桁がプログラムの格子の位置に対応する。
1993 年、Chris Pressey が「コンパイルが困難な言語」として作った。Befunge-93 はプログラムのサイズが 80 桁 25 行に固定されている。Befunge-93 の拡張 (一般化) である Funge-98 にはこの制限は無く、チューリング完全である。さらに Funge-98 には任意次元への拡張やマルチスレッド対応等が含まれている。
プログラム例.
"Hello, World!"を出力する.
 v @_ v
 >0"!dlroW"v 
 v :# < 
 >" ,olleH" v
5の階乗を出力する.
 5 100p:v
 v *g00:_00g.@
 >00p1-:^
言語仕様.
命令.
入出力.
以下、「スタックから y, x をポップする」と書いた場合、「スタックをポップし、その値を y とする。その後で再度スタックをポップし、その値を x とする。」を意味する。