巨大数研究 Wiki
Advertisement

「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{+}[->+>+>+<<<]>[->[->[->++<]>[-<+>]<<]>[-<+>]<<]
Advertisement