Best Obfuscated Algorithm

最高の難読化アルゴリズム

受賞者:E. Jay Berkenbilt

引用元:https://www.ioccc.org/1993/ejb.c

審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1993/ejb.hint

動作

2つのアルゴリズムが搭載されている。 1つはハノイの塔。コマンドライン引数に正の値を与えると、その高さのハノイの塔の解答を表示する。

$ gcc -o ejb ejb.c

$ ./ejb 3
move ring 1 from stack 1 to stack 2
move ring 2 from stack 1 to stack 3
move ring 1 from stack 2 to stack 3
move ring 3 from stack 1 to stack 2
move ring 1 from stack 3 to stack 1
move ring 2 from stack 3 to stack 2
move ring 1 from stack 1 to stack 2

もう1つ。負の値をあたえると、patience puzzleを外すまでの状態の列を表示する。 patience puzzleはたぶん連環・チャイニーズリングのこと。 右端の数字が最初のリングを表し、1はU字金具に入った状態、0は外れた状態を表すらしい。

$ ./ejb -3
111
110
010
011
001
000

解説

コードはセミコロンをかたどっている。 このプログラムには、セミコロンが2つしかない(変数宣言で1つ、return文の終わり)。 プログラムの規模(lines of code)を測るためにセミコロンを数えるとすると、このプログラムのセミコロンは2つか、それとも3つか曖昧にするため、というネタらしい。

型名などを除けば、キーワードはreturnしか使っていない。必然的に、main関数の再帰を伴う巨大な式1つからなるreturn文となっている。