Best One-liner

最高のワンライナー

受賞者:Laurion Burchall

引用元:https://www.ioccc.org/1994/ldb.c

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

動作

標準入力から1行をランダムに選んで出力する。

$ cat rsp.txt
rock
scissors
paper

$ gcc -trigraphs -o ldb ldb.c

$ ./ldb < rsp.txt
rock

$ ./ldb < rsp.txt
paper

$ ./ldb < rsp.txt
rock

$ ./ldb < rsp.txt
scissors

解説

trigraphを使っているワンライナー。 コードの構造はwhile(<cond>);だけ。

アルゴリズムがちょっと面白い。 1行目は100%の確率で選ぶ、2行目は1/2の確率で選ぶ、3行目は1/3の確率で選ぶ、4行目は1/4の確率で選ぶ、……と進めていき、最後に選んだ行を出力する。 これですべての行を公平に選べる。