引用元:https://www.ioccc.org/1992/buzzard.2.c
審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/1992/buzzard.2.hint
動作
独自スタックベース言語firstの評価器。次のように使う。
$ gcc -o buzzard.2 buzzard.2.c
$ echo "2 3 + . cr" | cat third - | ./buzzard.2
Welcome to THIRD.
Ok.
5
2 3 + . cr
がプログラムで、2
と3
をスタックにプッシュして、それらを足したものに置き換えて(+
)、それを10進数表示して(.
)、改行を表示する(cr
)という意味。
解説
firstは13命令しかない非常にプリミティブなスタックベース言語で、thirdはそれの標準ライブラリ。
実行するときは、firstインタプリタにまずthirdを食わせて、それからプログラムを食わせる。
thirdのソースコードは難読化されていないので、スタックベースプログラミング言語を知っていればそれなりに読める。
上の例の2
とか3
とかはすべてthirdが規定している。
firstとかthirdとかいう名前はプログラミング言語FORTHの劣化版みたいなネタ。
secondがないのは、5文字を超えるため(FORTHはもともと「4番目の言語」という意味でfourthと名付けたかったが、当時の開発環境ではファイル名が最大5文字だったのでFORTHになったという逸話がある)。
thirdはforth79と大体同じくらいの機能を備えているとか備えていないとか。
スタックベース言語自体が難読なので、コードの難読化自体にそれほど特筆するところはないと思う。
この年の翌年(1993年)に、現代でも有名な難解プログラミング言語であるBrainfuckやBefungeやFalseが登場している。
当時そういうブームがあったのかもしれない。