Best simple task performed in a complex way

複雑なやり方で行われる最高のシンプルなタスク

受賞者:Bruce Holloway

引用元:https://www.ioccc.org/1986/holloway/holloway.c

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

動作

Hello, worldプログラム。

$ gcc -o holloway holloway.c

$ ./holloway
hello world!

解説

やたらとややこしい無意味な演算でhello world!の文字列を計算している。

main関数の再帰を多用している。 まず出力する文字数の数だけ再帰し、それから1文字あたり3回再帰して、case f:case h:case g:を呼び出す。

f:は各文字の7ビット目をビット演算で算出し、h:は謎の定数テーブルtab1tab2を使って4~6ビット目の3ビットを返し、g:はよくわからないがフィボナッチ数列みたいな計算で1~3ビット目の3ビットを返す。

h:はちょっと面白いので少しだけ詳しく説明する。 これはゲーデル数のような方法で3ビットをエンコードしている。 tab2は素数列(を2倍にしたもの)で、tab1[i]tab2[n]で割り切れるとき、iを返すようになっている。 tab1の長さが8(つまり3ビット)、tab2の長さが14(つまり"hello world!\r\n"の文字数)になっているところがミソ。

賞名は[[1986/august]]と対称的になっている。

clangはmainの第2引数がchar**でないと怒るので、書き換えが必要。