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**
でないと怒るので、書き換えが必要。