Brainfuck
概要
編集Brainfuckは、 Urban Müllerによって1993年に開発された難解プログラミング言語です。
P"やFALSEに影響を受けました。また、膨大な数の難解プログラミング言語に影響を与えた言語です。
拡張子は、「.b」もしくは「.bf」です。
fuckが卑語であるため、様々な別名があります。それを以下に示します:
- bf
- Brainf**k
- Brainf*ck
このように、様々な別名のせいで、情報を探すことが困難になっていたりします。
仕様
編集要素
編集Brainfuckは以下のもので成ります:
- 現在のメモリを指し示す命令ポインタ。初期値はメモリの左端を指す。
- 少なくとも30000個の要素があるメモリ。初期値は0。
- 入出力のストリーム。
命令
編集Brainfuckは、8つの命令を持ちます。命令は以下の通りです:
命令 | 動作 |
---|---|
+ |
現在のメモリをインクリメントする。 |
- |
現在のメモリをデクリメントする。 |
> |
命令ポインタを1つ右に移動させる。 |
< |
命令ポインタを1つ左に移動させる。 |
. |
現在のメモリの値を文字コードとみなし出力する。 |
, |
入力を求め、入力された値を現在のメモリに代入する。 |
[ |
現在のメモリの値が0なら、対応する] にジャンプする。
|
] |
現在のメモリの値が0でないなら、対応する[ にジャンプする。
|
また、命令でない文字は無視されます。
Hello world
編集Brainfuckにおけるハローワールドプログラムを以下に示します。
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
実装
編集Brainfuckを利用するには、ソフトウェアをインストールするほかに、ブラウザで実行する方法があります。以下はその一例です。
Brainfuckの定数
編集英数字
編集0(48)
編集+++++++[>+++++++<-]>-
1(49)
編集+++++++[>+++++++<-]>
2(50)
編集+++++++[>+++++++<-]>+
3(51)
編集+++++[>++++++++++<-]>++
4(52)
編集++++[>++++++++++++<-]>
5(53)
編集++++[>+++++++++++++<-]>+
6(54)
編集+++++[>+++++++++++<-]>-
7(55)
編集+++++++[>++++++++<-]>-
8(56)
編集+++++++[>++++++++<-]>
9(57)
編集+++++++[>++++++++<-]>+
アルファベット・大文字
編集A(65)
編集>+[+[<]>>+<+]>
B(66)
編集--[++>+[<]>+]>
C(67)
編集+[->-[--<]>-]>
D(68)
編集+[->-[--<]>-]>+
E(69)
編集+[->-[--<]>-]>++
F(70)
編集-[+[>---<<]>+]>
G(71)
編集-[>+<-------]>--
H(72)
編集-[>+<-------]>-
I(73)
編集-[>+<-------]>
J(74)
編集-[>+<-------]>+
K(75)
編集-[>+<-------]>++
L(76)
編集>+[+<[-<]>>++]<
M(77)
編集>+++[[-<]>>--]<
N(78)
編集+[+[>>+<+<-]>]>
O(79)
編集-[+>++[++<]>]>-
P(80)
編集-[+>++[++<]>]>
Q(81)
編集-[>+<---]>----
R(82)
編集-[>+<---]>---
S(83)
編集-[>+<---]>--
T(84)
編集-[>+<---]>-
U(85)
編集-[>+<---]>
V(86)
編集-[>+<---]>+
W(87)
編集-[>+<---]>++
X(88)
編集-[+[+<]>>+]<
Y(89)
編集-[+[+<]>>+]<+
Z(90)
編集-[+[+<]>>+]<++