Hatena::ブログ(Diary)

Qu記(仮) RSSフィード

2011年 03月 15日

Herbert Tutorial 1 - s,r,lを使ったフィールドの移動

前回はHerbertというゲームの基本的なルールと、Herbert Online Judgeの使い方を簡単に解説しました。

今回は、Herbertのプログラム(H言語)の書き方の基礎を勉強しましょう。


s

まずは、前回の最後に示した


ssss

というコードを見返してみましょう。

http://herbert.tealang.info/problem.php?id=0 に自由にHerbertを動かすことのできるフィールドを用意してあります。

前回のチュートリアルを参考に、ここにコードを打ち込んで動かしてみましょう。

...すると、Herbertは4歩進んで停止しましたね?

f:id:quolc:20110315114323p:image


それでは、次にコードを


sssss

に書き換えて、やはり同様にHerbertを動かしてみましょう。

...すると、今度はHerbertは5歩進んで停止したハズです。


これでもうお分かりですね。 s は、Herbertを一歩前進させるための命令だったのです。

Straightの略と考えればいいと思います。


l,r

それでは次に、少し長くなりますが


ssrsslss

とコードを書き換えて、Herbertを動かしてみてください。

するとHerbertは、上→右→上とジグザグ走行したはずです。

f:id:quolc:20110315114322p:image


今度はステップボタンを使って最初から1動作ずつHerbertを動かしてみましょう。

すると、最初にフィールドの中央で上を向いている状態から始まって

前進 → 前進 → 右に90°回転 → 前進 → 前進 → 左に90°回転 → 前進 → 前進

という動きをした結果、ジグザグ走行になったと分かると思います。


これでもう理解してもらえたと思いますが、

r は、Herbertを右に90°回転させる命令で、

l は、Herbertを左に90°回転させる命令だったのです。

それぞれ、 rightleft の略ですから、覚えるのは簡単ですね。


さて、実はHerbertが実行できる命令は本質的には、このs,r,lの3つだけです!

言い方を変えてみると、例えば「後ろに進む」とか「右に並進する」といった複雑な命令はHerbertには存在せず、あらゆる動きを前進と左右回転だけで実現できる、あるいはしなくてはいけないというわけです。

だから、例えば後ろを向きたかったら、rrとかllといった90°回転×2=180°回転を行う必要があるのです。


練習問題

それでは最後に、実際に問題を解いて今回の復習をしましょう!

http://herbert.tealang.info/problem.php?id=144 に練習問題が用意されています。

sとrとlを上手く使ってHerbertを適切に歩かせてやることで、全てのターゲットを踏ませましょう。

この問題がクリアできれば、今回のチュートリアルは完了です!


次回は、もっと効率的にプログラムを書くためにプロシージャという概念を導入します。

これによってHerbertの本質である、規則性の発見とショートコーディングにようやく踏み込めます。

それでは、次回お楽しみに。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証