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:は謎の定数テーブルtab1とtab2を使って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**でないと怒るので、書き換えが必要。