Best Abuse of User

ユーザに対する最高の悪口

受賞者:Moxen N. Briddlebane and Lord Zarbon

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

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

動作

ユーザを罵るメッセージが自動生成される。

$ gcc -o briddlebane briddlebane.c -lm

$ ./briddlebane
you are a uneducated dumpster of misery

「おまえは悲惨な無知なゴミ箱だ」

$ ./briddlebane
you are a virulent bag of refuse

「おまえはクズの有毒なバッグだ」

解説

この作品の面白さはよくわかっていない。 英語ネイティブには面白いのかもしれない。 上の例は比較的やさしいメッセージで、あまり書きたくない単語もいっぱい含まれている。

技術的なポイントは、メッセージのエンコード方法だと思う。 巨大な文字列リテラルにエンコードされていて、printfの直前でfor(int i=0;i<1079;i++) printf("%c", s[i]);とすれば隠されている単語一覧を見ることはできた。 文字列リテラルは632バイトで、単語一覧が1079バイトだから、何らかの圧縮がされていると思われるが、詳しくは見ていない。 briddlebane.hintに書かれている”114”と”2”というヒントは、114を足して2でxorをとった上で数字をかき回しているのはわかるけれど、これらの数字に特別な意味があるのかはわからない。 乱数生成にrand2つの数字を極座標として、直交座標に変換した数字を使っているようだが、理由はよくわからない(ボックス・ミュラー法にしてはlogがないので違いそう)。 hintでは、「このプログラムはLord Zarbon(ドラゴンボールのザーボン?)から送られてきた」というようなノリで書かれている。

賞名は、「悪用」という意味のabuseではなく、「悪口」「悪態」という意味だと思う。