Worst Abuse of the Rules

ルールの最悪な悪用

受賞者:J. David Lowe

引用元:https://www.ioccc.org/2000/dlowe.c

審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/2000/dlowe.hint

動作

逆ポーランド記法の電卓。

$ gcc -DPERL_POLLUTE `perl -MExtUtils::Embed -e ccopts` dlowe.c -o dlowe `perl -MExtUtils::Embed -e ldopts`

$ echo "3 4 + 1 2 - * p" | ./dlowe
-7

解説

Perlインタプリタの組み込みAPIを使って、コード中に埋め込まれたPerlプログラムを実行する構成になっている。 あくまでこのプログラム自体はC言語で書かれているので、IOCCCのルールに従っていると主張している。 難読化については、「PerlのAPIはマクロばっかりだから、安易にプリプロセスしたら悲惨なことになるよ。でも大丈夫、PerlのAPIはとてもわかりやすい名前だからね。SvNVとかSvIVとかnewSVpvとか」とのこと。 ポータビリティは、「PerlはX Window Systemよりポータブルだ」と主張している。

埋め込まれたPerlプログラム自体は特段難読化されていないが、Perlなので普通に難しい。 「IOCCCのルールの裏をつくことにフォーカスして、Perl部分はきれいなコードにするつもりだったが、どうしてもできなかった」と作者は言っている。 入力の演算子はchr(((ord)%39)+3**4)x2によって関数名に変換し、それを呼ぶようになっている。 たとえば+UUという関数名になる。

コード形状は川の字。3つの対象的なコードスタックを表現しているとのこと。

“easter egg”が含まれているということだけれど、たぶん次の挙動のことだと思う。

$ echo poot | ./dlowe
poot was here!

作者は[[1998/dlowe]][[1998/dloweneil]]と同じであることに注意。

現代ではPerlのAPIが少しだけ変わっていた(naPL_naに変わった)のでそこだけ修正した。

パッチ

パッチをダウンロード