引用元: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
文となっている。