読者です 読者をやめる 読者になる 読者になる

Herbert Online Judge ってのをやってみてる

programming

http://herbert.tealang.info/

プログラマパズルゲームみたいなもの。遊び方はルールのページを見て。
ルールはかなりシンプルだけど奥が深い。
なかなか楽しいんだけど、最初は問題0005(5問目)から解けなくて、0003/0004も解けたけどトップの記録が信じられないくらい短くて1日くらい悶え苦しんでた。
私の知らない裏ルールがあるんじゃないか、とかまで疑い始めて、色々探してたら、裏ルールかどうかはともかく、ルールのページには明記されていなかった私の知らない挙動が存在したことが判明した。

要素 構文
: : :
引数 数字、式、0 個以上のステートメントの並び。 rsr
A-1
プロシージャコール (省略) a(1,B-1,srs)
b
: : :
期間限定!教育機関向け 新 Office お試しキャンペーン! | マイクロソフト 教育機関向け

!? 命令引数付きプロシージャのプロシージャコールに命令を複数渡せるだと…!
このページへのリンクはチュートリアルのページにあったので、もっと早く気付けよと言われればその通りなのだが、ルールのページと同じことが書いてるもんだとばかり思ってたのでスルーしていた。
複数の命令を渡せると言うことは、再帰でちょっとずつ命令を付け足したりできるわけだ。例えば、

a(X):Xrra(sX)
a()

こうすると、0歩進んで振り返って、1歩進んで振り返って、2歩進んで振り返って…と言った挙動になる。
これを知ってるか知らないかでだいぶ違うよ!てかこれ知らないと解けない問題がほとんど。
もしこれからやってみようって人は、このルールには要注意。ルールのページ見ただけだと普通の人は(少なくとも私は)気付かないよこれ。