Python版をいじっていてPythonのバイトコードを解読したり、VMのソースを読んだりしていたらFORTHを思い出したのでやっつけで書いてみました。
: ZUNDOKO
0 \ ZUNカウンタ
BEGIN
2 RANDOM \ 0 or 1
IF ." ZUN" 1+ FALSE \ 'ZUN'を出力し、カウンタを進める。
ELSE
." DOKO"
DUP 4 >= IF TRUE \ ZUNカウンタの値を複製し、終了条件に達したか判定する。終了ならTOSにTRUEを積む。
ELSE
DROP 0 FALSE \ ZUNカウンタを0クリアする。
THEN
THEN
CR \ 改行
UNTIL \ TOSの終了フラグがTRUEならループを抜ける。
DROP \ ZUNカウンタの値を捨てる。
." KIYOSHI!" CR
;
何がハマったかって、行コメントの記法を忘れていて''でなく'#'を入れてスタックが滅茶苦茶になった。
FORTHのワードをほとんど忘れていてあまり練れていないのですが、本物のFORTHプログラマーはこの程度のプログラムなら3行くらいでワンライナーっぽく書くと思います。
また、このプログラムは古い仕様に存在するワードだけで組んだので、GForthとかなら私の知らない文字列やクラスを拡張するワードがあるはずなのでもっと楽に書けるはずです。