引用元:https://www.ioccc.org/2011/goren/goren.c
審査員・作者による説明:https://www.ioccc.org/2011/goren/hint.html
動作
適当な文字列を標準入力に与えて起動すると次のようなメッセージが出る。
$ gcc -o goren goren.c
$ echo "Hello, world!" | ./goren
|\_/|
| | /
\==============/
This is not a pipe
|
で始まる文字列を与えた場合は次のようになる。
$ echo '|' | ./goren
|
This is a pipe
解説
ルネ・マグリットの油彩画、『イメージの裏切り』へのオマージュ作品。
『イメージの裏切り』は、パイプの絵に「これはパイプではない」という注意書きをつけた、シュルレアリスムの作品。
パイプではなく、絵である(たばこを詰めることはできない)、という主張らしい。
最初の動作例はマグリットの絵をアスキーアート風に表現している。
第2の動作例はさらなるひねり。
|
は実際にパイプなので、メッセージが「これはパイプである」に変わる。
コード形状は、額縁の中にC言語のHello, world!みたいな単純なコードが書かれているようなイメージ。
センスが溢れている。
もちろん、コードとしては額縁部分の文字列が割り込んでいるので、違う意味になる。
いちばん最後の行にはAr;t*ist="Rene Magritte"-(1898-1967);
と、マグリットの名前が書かれている。
技術的なポイントは、条件式をまったく使ってないところ。
マグリットへの「無条件」の称賛を示す、とのこと。
if
文はもちろん、?:
も&&
も||
もない。
出力する文字列を変えるだけなのでそこまで難易度が高くはないものの、全体として非常に完成度が高い作品。
hint.textにある通り、64ビット環境に対応していないので、最低限の修正を行った。
最下行に余裕があるのでおそらくレイアウトを崩さない修正も可能ではないかと思うが、差分が非常に大きくなってしまうのでこのままとした。
-m32
でも動作はするが、最後にsegfaultが起きた(詳細未調査)。
パッチ
パッチをダウンロード