引用元:https://www.ioccc.org/2013/birken/birken.c
審査員・作者による説明:https://www.ioccc.org/2013/birken/hint.html
動作
テトリスで絵を描く。
$ gcc -o birken birken.c
$ ./birken < examples/ioccc.txt
すごい勢いで自動プレイが進み、積み上がっていって、絵が作り上げられていく。
元のファイルは次の通り。
$ cat examples/ioccc.txt
4 1111111111177 4
11177
4 11177 4
11177
4 11177 4
1111111111177
4 4
1111111111177
4 111177 111177 4
111177 111177
4 111177 111177 4
1111111111177
4 4
1111111111177
4 1177 4
1177
4 1177 4
1111111111177
4 4
1111111111177
4 1177 4
1177
4 1177 4
1111111111177
4 4
1111111111177
4 1177 4
1177
4 1177 4
1111111111177
4 4
他にもレイアウトファイルがたくさん添付されている。
解説
L型、J型、T型のブロックのはみ出したところで1ドットを描く。
残った部分は行を埋めて消す。
下にブロックがないところには単純には置けないので、一旦足場を作って1行分を描き、最後に足場を消すということもする。
動きのパターンはあらかじめ計算していて、文字列リテラルで埋め込まれている。
L型、J型、T型の3色しか描けない。
ファミコン時代のゲームのキャラクター(通常3色+透明色の4色)を描くのが目標だったので十分とのこと。
横幅も16ドットの絵を描けるよう、21列になっている。
足場などのために左右の2列の空きが必要で、20列では消せない(1ドット分を除くと、消すべきブロックが奇数個になってしまう)ので、もう1列ふやしたとのこと。
コード形状はテトリス風。
T型ブロックを選んだのは、テトリスのT。
過去のIOCCC作品には四角いコードが多くあったので、それを作る寸前の状態を表現したとのこと。
変数名はint T,e,t,r,i,s
や、int E,L,O,R,G
(テトリスの版権を持っていたソ連の外国貿易協会)、D,V,K
(ソ連のPDP-11互換機)など。
この年から導入されたコードサイズ測定ツールのiocccsizeのバグをついている。
char*_ = "'""/*";
と、文字列中にコメント開始を入れることで、その後が全部スキップされるので、8バイトと測定されるということ。
なお、審査員自身が次のように書けば0バイトになることを指摘している。
/* *\
/....
審査員のコメントでは、テトリスは計算複雑性の研究からPTSDの治療までいろいろ使われているので、お絵かきはすばらしいアイデアだろう、とのこと。