「brainfuckでn文字のコードでメモリ上に残すことができる最大の自然数」を\(BF(n)\)とする(メモリの個数も大きさも無限大とする)。brainfuckはチューリング完全(いかなる計算可能関数も表現できる)なので、\(BF(n)\)は計算不可能関数であり、\(f_{{\omega}_1^{CK}}(n)\)程度の強さである。
n | BF(n)の下限 | コード |
---|---|---|
1 | 1 | + |
2 | 2 | ++ |
3 | 3 | +++ |
4 | 4 | ++++ |
5 | 5 | +++++ |
6 | 6 | ++++++ |
7 | 7 | +++++++ |
8 | 8 | ++++++++ |
9 | 9 | +++++++++ |
10 | 10 | ++++++++++ |
11 | 11 | +++++++++++ |
12 | 12 | ++++++++++++ |
13 | 16 | ++++[->++++<] |
14 | 20 | +++++[->++++<] |
15 | 25 | +++++[->+++++<] |
16 | 30 | +++++[->++++++<] |
17 | 36 | ++++++[->++++++<] |
18 | 42 | +++++++[->++++++<] |
19 | 49 | +++++++[->+++++++<] |
20 | 56 | ++++++++[->+++++++<] |
21 | 121 | ->>>>>+[>[-<+++>]<<+] |
22 | 364 | ->>>>>>+[>[-<+++>]<<+] |
23 | 1365 | ->>>>>>+[>[-<++++>]<<+] |
24 | 5461 | ->>>>>>>+[>[-<++++>]<<+] |
25 | 21845 | ->>>>>>>>+[>[-<++++>]<<+] |
乗法[]
以下のコードは、自然数a,bに対してabを計算する。
a{+}[->b{+}<]
ここで、a{文字列}はa個の文字列(今回はa個の+)を表す。
冪乗[]
以下のコードは\(\frac{b^{a}-1}{b-1}\)を計算する。
-a{>}+[>[-<b{+}>]<<+]
再帰[]
\(f(n)\)に対し、\(f^n(n)\)は以下のコードで計算できる。
n{+}[->+>+<<]>[->F<]
ここで、Fはポインタがさしている値nをf(n)に書き換える操作を表す。これを使うと急増化関数はこのように計算できる。
\(f_0(n)\)=
n{+}+
\(f_1(n)\)=
n{+}[->+>+<<]>[->+<]
\(f_2(n)\)=
n{+}[->+>+<<]>[->[->+>+<<]>[->+<]>[-<<+>>]<<<]
\(f_3(n)\)=
n{+}[->+>+<<]>[->[->+>+<<]>[->[->+>+<<]>[->+<]>[-<<+>>]<<<]>[-<<+>>]<<<]
ちなみに短くしようとすれば\(f_3(n)\)はここまで短くなる。
n{+}[->+>+>+<<<]>[->[->[->++<]>[-<+>]<<]>[-<+>]<<]