編集Brainfuck(ブレインファック)は難解プログラミング言語のひとつ[要出典]。名称に卑語が含まれるため、Brainf*ckなどと表記されることがある。影響を与えた言語Ook!、Pxemテンプレートを表示この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。Müllerがコンパイラがなるべく小さくなる言語として考案した。実際、Müllerが開発したコンパイラのサイズはわずか123バイト、インタプリタは98バイトであった。Brainfuckプログラムは非常に可読性・記述性が低いため実用性は期待できないが、チューリング完全である。その簡潔さから多くの派生言語を生み出すこととなった。Brainfuckプログラム、インストラクションポインタ(プログラム中のある文字を指す)、少なくとも30000個の要素を持つバイトの配列(各要素はゼロで初期化される)、データポインタ(前述の配列のどれかの要素を指す。左の要素を指すよう初期化される)、入力と出力の2つのバイトストリーム。Brainfuckプログラムは、以下の8個の実行可能な命令から成る(他の文字は無視され、読み飛ばされる)。ポインタをインクリメントする。ポインタをptrとすると、C言語の「ptr++;」に相当する。ポインタをデクリメントする。C言語の「ptr--;」に相当。ポインタが指す値をインクリメントする。C言語の「(*ptr)++;」に相当。ポインタが指す値をデクリメントする。C言語の「(*ptr)--;」に相当。ポインタが指す値を出力に書き出す。C言語の「putchar(*ptr);」に相当。入力から1バイト読み込んで、ポインタが指す先に代入する。C言語の「*ptr=getchar();」に相当。C言語の「while(*ptr){」に相当。(の直後[1])にジャンプする。C言語の「}」に相当[2]。派生言語編集この節に雑多な内容が羅列されています。事項を箇条書きで列挙しただけの節は、本文として組み入れるか、または整理・除去する必要があります。(2018年3月)以上の8つの命令文字は可読性のために選ばれたものであり、これらが使われなければならない理由はなく、より難解にすることを目指したり、あるいは単なる遊びとして、各命令に使用する文字を置き換えた派生言語が考えられている。以下はその代表例である。「A」だけで記述する。文字を置き換え、難読性を深めた例。4つの命令「|&~^」を加えたもの。終了時にポインタの指す値が0になるまでポインタを進め値を出力する。world!"が格納される。原型をさらに発展させた例。「Ook.」「Ook!」「Ook?」のうち2つのトークンから成る文字列をBrainfuckの各命令に当てはめたもの。使用される記号(実際には文字列だが)の種類がわずか3つと、本家より少ない。元の8種類の文字を置き換え、よりユーモアを加えた例。ジャンプしている、と考えることもできる。3.0のもとで利用可能です。プライバシーデスクトップ。