Most notable and best tool
もっとも注目すべきで、最高のツール
受賞者:Alex Deckmyn
引用元:https://www.ioccc.org/2012/deckmyn/deckmyn.c
審査員・作者による説明:https://www.ioccc.org/2012/deckmyn/hint.html
動作
次のように実行する。
$ gcc -o deckmyn deckmyn.c
$ ./deckmyn "`cat deckmyn.c`" "`cat example_beethoven`" > example_beethoven.pbm
$ convert example_beethoven.pbm example_beethoven.png
解説
入力した楽譜データから、楽譜の画像を生成する。
コードの形状がト音記号や音符などの楽譜を構成するパーツになっている。
コード形状は単なる飾りではなく、実際に描画するときにビットマップとして用いる情報になっている。
実行時の自分のソースコードを第1引数として渡す必要がある(ファイル名を渡すのではなく、ソースコード自体を渡していることに注意。審査員はシェルの悪用と言っている)。
楽譜はABC記法風に書く。
CDEFGABがドレミファソラシで、cdefgabは1オクターブ高いドレミファソラシ。
音の高さの後に4
が書いてあれば4分音符、8
なら8分音符、4.
なら付点4分音符、という具合。
KF
でト音記号の代わりにヘ音記号、m44
で4分の4拍子、:
で小節線、x
で行を変えるなどは楽譜生成のための独自拡張。
詳しくはMANUALファイルを参照のこと。
出力画像はPBMフォーマット。
ちなみに、example_beethovenはベートーベンの交響曲第9番。
Cのコンテストの作品ならC major(ハ長調)を生成できるべき、とのこと。
賞名の”notable”も、notable(注目に値する)とnote(音、音符)をかけた洒落。
コードの特徴としては、形状が楽譜のパーツであることに加え、変数宣言を一切していないとのこと(メモリフットプリント削減のため、とうそぶいている)。
使っているのはargc
とargv
のみ。
引数にファイルの内容をそのまま渡す必要があるのはこのためで、冒頭の数行部分は破壊してメモリ領域としてつかっているらしい。
また、実行ファイル名(argv[0]
)も4文字以上ないとダメとのこと。
hint.textにはふざけたことがいっぱい書いてある。