引用元: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
コマンドライン引数で指定した圧縮ファイルを解凍することもできる。
添付されている圧縮画像は以下の通り。
$ ./prog d < lena512.bin > lena512.ppm
$ ./prog d < fruits.bin > fruits.ppm
$ ./prog d < vintage_cars.bin > vintage_cars.ppm
解説
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/