Most Complete Use of CPP

CPPのもっとも完全な使い方

受賞者:Dominik Muth

引用元:https://www.ioccc.org/2015/muth/prog.c

審査員・作者による説明:https://www.ioccc.org/2015/muth/hint.html

動作

プリプロセッサでチューリングマシン。

5×2を計算する例らしい。

$ gcc -include "machine_times2.h" -include "tape_five.h" prog.c -o prog

$ ./prog
(((((((((((((,), 1), 1), 1), 1), 1), 1), 1), 1), 1), 1), _), _, (,))

他にもいろいろマシンやテープの定義があるので参照のこと。

解説

#ifも再帰#includeもせず、プリプロセッサを繰り返し適用することもなくチューリングマシンを実現しようという試み。 [[2001/herrmann1]]の改善と言えるか。

実際のところプリプロセッサはチューリング完全ではないので、デフォルトでは8^3 = 512ステップだけ遷移を行う。 それで終わらなかったら、途中状態のテープが出力されるとのこと。 なお、このステップ数上限はビルドオプションの-DX=nで8^n回に変更できる。

また、-DV=1でステップごとに~を表示したり、-DV=2でステップごとのテープの状態を表示したりすることもできる。