Most inflationary

もっともインフレ

受賞者:Fabrice Bellard

引用元:https://www.ioccc.org/2018/bellard/prog.c

審査員・作者による説明:https://www.ioccc.org/2018/bellard/hint.html

動作

画像圧縮アルゴリズムの有名なサンプルデータ、Lenaの画像がPPM形式で出力される。

$ gcc -o prog prog.c -lm

$ ./prog > lena.ppm
lena.ppm
図:lena.ppm

コマンドライン引数で指定した圧縮ファイルを解凍することもできる。 添付されている圧縮画像は以下の通り。

$ ./prog d < lena512.bin > lena512.ppm
lena512.ppm
図:lena512.ppm(引用元:https://www.ioccc.org/2018/bellard/lena512.bin)
$ ./prog d < fruits.bin > fruits.ppm
fruits.ppm
図:fruits.ppm(引用元:https://www.ioccc.org/2018/bellard/fruits.bin)
$ ./prog d < vintage_cars.bin > vintage_cars.ppm
vintage_cars.ppm
図:vintage_cars.ppm(引用元:https://www.ioccc.org/2018/bellard/vintage_cars.bin)

解説

lena.ppmは49167バイトあり、prog.cは3984バイトなので、12倍の大きさのデータが隠されていることになる。 画像データ部分に限定すれば1220バイトなので、40倍とも。

$ wc -c lena.ppm
49167 lena.ppm

ただのJPEGではこの圧縮率は実現できないということで、次の工夫がなされているとのこと。

なお、IOCCCのルールとして8ビット目が立った文字をコードに含めることは禁止されているので、ASCIIコードの1~127で構成されている。 また、IOCCCのサイズルールを利用すべく、空白文字や{;}が多めに出るように調整されている。

詳しく解説している記事があったのでリンクを置いておく。

http://eastfarthing.com/blog/2020-09-14-decoder/