引用元:https://www.ioccc.org/1998/chaos.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1998/chaos.hint
動作
3Dオブジェクトを端末で見るビューア。
デフォルトでは立方体を表示する。
$ gcc -o chaos chaos.c -lncurses
$ ./chaos
....
...```` : `````......
..```` : `::
: ```... : .`.`
: ````..: .` :
: :```... .` .`
: : `: :
: :. : .`
: .`` ``...: :
: ..` :`.. .`
: .` : :`
:`` .` .`
``.. : .`
``. : .`
``.. .`:
``..::
`
hとyで第1軸での回転と逆回転、jとuで第2軸での回転と逆回転、kとiで第3軸での回転と逆回転。
aでズームアップ、zでズームダウン、qで終了。
コマンドライン引数にデータファイルを指定することで、他のオブジェクトも見える。
$ ./chaos ioccc.data
.::.
.:::. .::`:::
... .::``:::.:`
.:::::::. .:: ::
....... .:::` ```.:: :: .:`
..::::::::::. :::: ::: ..::::::
.. :::::```````:`:. ::: ::...::` ``
`:` `: .:::.` ::.:`::. .:: `:::`
`:. :: :::: ::: `:::::::`
:`.:: :::`. .:: ````
: :.`. : ::`. ...:::`
`.:.`. ``:::::::::``
`.:`:. ``````
:. :.
``
なお、3秒操作をしないと勝手に回転が始まる。
解説
コード形状は普通。
無引数のときに表示される立方体のデータは、コード中に文字列リテラル(char P[] = "AlWuzEre ...";
)として埋め込まれている。
ただし普通にP
から読むのではなく、自分自身の実行ファイルをfopen
し、データのヘッダであるAlWuzEre
を手がかりにデータの位置を特定し、そこから読み込むという変なことをしている。
つまりコンパイラがこの文字列データをそのまま実行ファイルに埋め込むことを期待している。
しかし、自分の環境ではローカル変数の文字列リテラルはそのまま埋め込まれなかったので、グローバル変数に置き換える修正が必要だった。
賞名のオブジェクト指向は、オブジェクトをみるツールというのにかけている。
パッチ
パッチをダウンロード