Most Unusual Data Structure

もっとも異常なデータ構造

受賞者:Peter J Ruczynski

引用元:https://www.ioccc.org/1990/pjr.c

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

動作

固定メッセージを出力するだけ。

$ gcc -o pjr pjr.c

$ ./pjr
the quick brown fox jumped over the lazy dog

解説

X=g().s().v().S().j().f().r().x().p().…というメソッドチェーンのようなコード。 1関数が1文字を出力する。 .a()z.b()y.c()xというように、abc順を反転した文字を出すとのこと。

実現するためには構造体を使えばよい。大まかには次のような構造になっている。

// 関数プロトタイプ宣言
struct F a();
struct F b();
struct F c();
...

// 肝となる構造体
struct F {
  struct F (*a)(), (*b)(), (*c)(), ...;
} X = { a, b, c, ... };

// 関数定義(かならずXを返す)
struct F a() { printf("a"); return X; }
struct F b() { printf("b"); return X; }
struct F c() { printf("c"); return X; }
...

main(){
  X = a().b().c()...;
}

一発ネタの難読化でシンプルにまとめられている。