引用元:https://www.ioccc.org/1989/ovdluhe.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1989/ovdluhe.hint
動作
与えられたテキストを参考に、適当な文字列を生成していく。
$ gcc -o ovdluhe ovdluhe.c
$ ./ovdluhe < /usr/share/dict/american-english-small
's
Catholic's
Catholicism
Americans
April's
American
Asians
F
F's
Frence
absconding
abunday's
Tuesday's
Christmases
Thursday
Wednesday's
Frence
abbeys
...
解説
「猿がタイプライターを無限に叩き続ければ、いつか必ず任意のテキスト(たとえばシェイクスピアの作品でも)を打ち出す」という無限の猿定理に着想を得た作品。
最近出力した4文字分だけの記憶を持ち、元のテキストの中でその4文字の直後に現れる確率が高い文字をランダムに選んで出力する、というのを繰り返す。
難読化は、識別子がape(猿)っぽい文字列ばかりという程度だと思う。
興味深い挙動というネタで勝利した作品。
次の3点を修正した。
#define D define
して#D
するコードを展開。
typedef char ape
とした上でunsigned ape
とするのはダメなようなのでunsigned char
に置き換え。
*(ep-A)= *(ep++);
は未定義動作(副作用完了点の前に変更と読み出しがある)ので*(ep-A)= *(ep),ep++;
に修正。
パッチ
パッチをダウンロード