Most stellar

もっとも輝かしい

受賞者:Timo Poikola

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

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

動作

北斗七星のアニメーションをする。

$ gcc -o prog prog.c

$ ./prog
実行終了した様子
図:実行終了した様子

端末の24ビットカラーの機能を使って、なるべく実際の星の色に近い色で表示される。

解説

天文学者のアニー・ジャンプ・キャノンが行ったスペクトル分類にしたがって色付きで北斗七星をアニメーションする。

審査員がコメントで書いている”Oh, Be A Fine Gal/Gentlemen, Kiss Me!”は、スペクトル分類のO、B、A、F、G、K、Mを暗記するためのフレーズ。

Fletcher-16のチェックサムアルゴリズムで自分自身を検証するので、下手にソースコードを編集すると動かなくなる。 とは言え、fopen(__FILE__)しているだけなので、一旦プリプロセスを通したソースコードを作ってしまえば回避できる。

復活祭(イースターの日)に実行すると最後に”Lets find some Easter eggs”というメッセージが出る。 時計を変えなくても、プリプロセスしたソースコードを編集してtime_t j = 1522584000;とすれば確認できる。

コードは星型形状。 __ATOMIC_SEQ_CSTのような定数を無意味に利用してわかりにくくしている。 Pascal風にbegin;end;で書きたかったが、サイズの都合上B/Eのマクロになっている。 printf()$のマクロになっている。 47行目の巨大なfloat型の数字は、IEEE 754の浮動小数点数を文字列として解釈すると、起動直後のメッセージになっていることがわかる。

$ ruby -e 'p [4612954808543207739097088.0, 207.285645, 214354950132336733650542884425029386240.0].pack("f3")'
"25th IOCCC!\x7F"

このプログラムには少なくとも3つの機能がある、とされているが、これはちょっと明確にはわからない。 北斗七星の描画、復活祭の日の判定、チェックサムアルゴリズム、でよいのだろうか。