最高のワンライナー
受賞者:Thomas A. Fine
動作・解説にジャンプ »
引用元:https://www.ioccc.org/1991/fine.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1991/fine.hint
ROT13エンコーダ。
$ gcc -o fine fine.c $ echo Hello | ./fine Uryyb
80バイトでROT13エンコードをする。
b=64^a&223という補助変数を定義することで、アルファベットの範囲(65..90と97..122)を特定する処理と、ROT13変換のために13文字分ずらす処理を巧妙にまとめている。 前者は0<b&&b<27で判定でき、後者は(b+12)%26+1で13文字分ずらした上で上位ビットをa&96とORすることで元の文字に復元できる。
b=64^a&223
0<b&&b<27
(b+12)%26+1
a&96
8ビット目の保存を無視して1バイト減らすことが読者の課題になっているが、223を97にすればいいと思う。 余談だが、whileではなくforにすることでさらに1バイト減らせるような気がする。
223
97
while
for