[HOME] > [高II情報B] > [アルゴロジック ヒント] |
アルゴロジック ヒント |
問題をクリアしたときのメッセージが,That's Great !であれば,一番無駄のないアルゴリズムが完成したということで,◎の評価がもらえます。
それに対して,クリアしたときのメッセージが,one more challenge !の場合は,アルゴリズムのどこかにまだ改良できる(=少ない手順で目的を達成できる)余地があるということです。評価は○がもらえます。言い換えれば,あと一歩で◎をゲットできるということです。
すべての問題で◎ゲットして,スーパープログラマーの仲間入りを目指しましょう。
アルゴロジックJr.は新たに設けられたカテゴリーで,入門編よりも簡単な問題が並んでいます。しかし,侮ることなかれ。ここで学んだ考え方が後で役立ちます。入門編をいきなりやる前に,焦らず解いてみましょう。
次の7つの問題があります。
「入門編」の問題は,この先の問題を解決するために,是非とも知っておかなければならない必須問題です。(これを全部クリアしないと「初級編」に進めません。)
これらの問題を通して,コマンドブロックの意味と,それを組み合わせるとどのようにロボットを動かせるのかをつかんでおきましょう。
初級編には次の14個の問題があります。[2011.11.01追記]
初級編には次の13個の問題があります。[2011.10.02追記]
初級編には次の12個の問題があります。[2011.07.31追記]
初級編には次の11個の問題があります。[2011.07.03追記]
「十字」だから,「4回同じ処理を繰り返せばよい」ということに気付くのは簡単です。
しかし,最初に[前進]するのがよいとは限りません。
ロボットにすべての旗を「最短距離」で取りに行かせる必要はありません。
ロボットを同じ動き方にして,それを「繰り返す」ことですべての旗を取ることが大切です。
「斜め」の動き方は,[移動コマンドブロック]を2枚横に並べて配置(=並列接続)します。
「同じ動き」を「繰り返す」ことが大事です。一度旗を取ってしまったところを,何度もロボットを通らせるのは手順が増えてしまうので×です。
「繰り返し」で旗を取り残してしまうときは,思い切ってそれだけを「特別な動き」にする考え方も大切です。
旗の上をロボットが通過しただけでは,「旗を取った」ことになりません。
左右の動きは,ロボットが正面に向いている方向に対して[左]か[右]です。
「同じ動き」を「繰り返す」ためには,一手順の「動き」が終わったロボットの最後の向きに注意が必要です。
ぱっと見て2つの動きに分けられることが掴めたらしめたもの。
ロボットに無駄な動きをさせないことを心がけてください。
入門編初の「トレース問題」です。
8回繰り返せば描けそうですが,そのためには移動距離を同じかどうか?をマスの数で数えてみてください。
典型的な繰り返し処理の問題です。これから先に何度も登場する「八角形問題」の基本となる問題です。
描き方は何通りか考えられますが,◎をゲットするためには工夫が必要です。
1回目の繰り返し処理終了時に,2回目の処理をスムーズに始めるには,最後のロボットの向きをどうするか?がポイントです。
合計8回の繰り返し処理で描けることが,すぐにわかると思います。しかし,この問題も◎をゲットするためには工夫が必要です。
1回の「移動と回転」をその後の処理にも使える工夫が必要です。
最初にどのように動かすかによって,タイルの総数が異なります。これも「8.かざぐるま」と同様,最後のロボットの向きがポイントです。
この問題も最初の動きが肝心。タイルの総数を減らすためには,無駄な動きをさせない必要があります。
旗の置かれている位置を縦/横/斜めと探ってみましょう。パターンに気付けば,8回ループで完成ですね。
2011.08.08訂正
隅の1ブロックをどう攻めるかを考えましょう。あとは4回ループで完成です。
ロボットの最初の向きがうまくいかない原因です。正面を向いているロボットは,前/左/右はコマンドタイル1つで自在に動けます。
ロボットの動きを細かく分けようとせず,大胆に動かしましょう。
中級編には次の14個の問題があります。[2011.11.01追記]
この辺りから少しずつ難しくなります。
中級編には次の13個の問題があります。[2011.10.02追記]
中級編には次の12個の問題があります。[2011.07.31追記]
中級編には次の11個の問題があります。[2011.07.03追記]
◎をゲットするためには,タイルの並べ方に工夫が必要となります。うーん,このタイルの並べ方は「Jr.編」や「入門編」に紹介されていないので,気づくのが難しいのではないでしょうか。
気分を盛り上げていきましょう!↑↑[2011.07.10追記]
「初級編」の「3.田」と同じく,一度旗を取ってしまったところを,何度もロボットを通らせるのは×です。
しかし「繰り返し」を考えると,同じ道を通らざるを得ないことも出てきます。
ロボットにどれだけ「無駄のない動き」を「繰り返させるか」がポイントです。
「前進」してから[左]または[右]に動くよりも,「前進」と[左]または[右]のコマンドブロックを横に並べて(並列接続して),「斜め」に進むほうが手順を1回減らすことができます。
この問題も「同じ動き」を「4回繰り返す」ことに気付くのは簡単です。一手順の「動き」が終わったロボットの向きに注意するのは,「初級編」の「4.十字の池」と同じです。
この辺に来ると,そろそろ「同じ動きを繰り返す」ためのコツも飲み込めてきたのではないでしょうか。
問題は,ロボットに「どの程度同じ道を通らせるのか」ということです。
ここでも「斜め」をうまく活用しましょう。
中級編で初めての「トレース問題」です。マスに描かれている図形が,ロボットの動いた軌跡になるようにコマンドブロックを配置しなければなりません。
ポイントは「斜め」を向いたロボットが前進するときのことです。「距離」を考えると失敗します。あくまでもロボットは「マス」の個数分動きます。これは「入門編」の「7.トレース(八角形)」でやりました。
「初級編 10.風車」と似て非なるものです。
問題の図に示された旗の大きさが違うように思えますが,マスの個数で考えてみると...。
続いての「トレース問題」です。
横移動ブロックが足りないと思ったら,その時点でハマっています。
中心部分に注目してください。必ず45度の回転が必要だとわかります。
これも「中級編 4.旗車」同様,マスの個数にだまされそうになります。
移動距離に注意です。等しい移動距離は長さではありません。あくまでもマスの個数です。
素直に旗のある位置までロボットを動かしてみましょう。
しかしそれだけでは◎がゲットできないのが「中級編」の難しさ。
初級編「8.かざぐるま」で学んだ,次の移動を考えてロボットを動かす必要があります。
よく見てみると,卍のような図柄に見えます。この図柄をくるくる回して眺めて,大局をとらえてみてください。
ロボットの動きを細かく分断するのは,うまいやり方といえません。
初級編「9.四角いメガネ」と同様です。1回分の「移動と回転」をその後にも使える工夫が必要です。
異なるサイズの2つのTがありますが,マスの個数で考えてみると,アルゴロジックの世界では同じ大きさです。(「中級編 4.旗車」と同じです。)
「初級編 10.風車」と同じように,一手順の最後のロボットの向きを意識してみてましょう。
回転は,2回で済むはずです。
基本的な考え方は「中級編 10.T」と同じです。これもロボットの回転回数を減らすために,どういう動きをさせるのが良いのかに注目です。
意外とシンプルに考えるほうがよいのかも。
ここまでの問題のように,回転回数を減らそうとして単純にコマンドブロックを追加していくと,左右移動のブロックが足りなくなります。
11ブロック全部を埋めてしまうと,"That's great!"がもらえないのが悔しいですね。
この形を見れば,すぐに階段状にロボットを進めて右下で反転させたくなりますが,それでは◎の"That's great!"にはなりません。
どのような動作パターンの繰り返しでこのトレースを表せるかを考えているうちに,解決するでしょう。
ここまでくれば,8方向回転系の問題も見慣れたものとなっているはず。
上手に斜め移動を利用しようとすると,かえって失敗します。
シンプルに正攻法で行くのが良いと思います。
上級編には次の14個の問題があります。[2011.11.01追記]
上級編には次の13個の問題があります。[2011.10.02追記]
上級編には次の12個の問題があります。[2011.07.31追記]
上級編には次の11個の問題があります。[2011.07.03追記]
このレベルになると,1回ではなかなかロボットが思ったように動いてくれません。
諦めずに何度か挑戦してみると,「どういう動きを繰り返せばよいのか」が見えてきます。
何度も試行錯誤してみてください。
[Ver.1.2]
「初級編」の「3.田」でやったように,繰り返し処理に向かないところは,別の動きをさせてみるとよいのでは?
一歩踏み出す勇気が大切です。
[Ver.1.0]
同じ動きを「繰り返す」ことを考えるときに,1回の「同じ動き」を「同じ動き」の「繰り返し」で表せないかを考えてみましょう。
アルゴリズムを考えるときは「手順を減らす」ことが大切です。
旗のある位置を観察してみると,右斜め上と左斜め下(第1,第3象限)と左斜め上と右斜め下(第2,第4象限)が同じことがわかります。
「手順を減らす」ためには,あえてロボットを無駄に動かすことも大切です。「一手順の中では無駄に思えても,全体の処理から考えるとそうではない」ところが,アルゴリズムを考えるときの難しさではないでしょうか。
簡単そうに見えて,なかなか◎をゲットしにくい問題です。
「上級編」の「1.四隅の回廊」で扱ったように,どこまで「同じ動き」の「繰り返し」でロボットの動きを表現できるかがポイントです。
この図からは,とても複雑なトレースを解決しなければならないように思えます。コマンドブロックを並べるスペースが絶対足りないのではないか?と,さじを投げてしまいそうです。
しかし,試行錯誤していくうちに,先ほどから何度も登場している1回の「同じ動き」を,「同じ動き」の「繰り返し」で表現できそうだというところに気付けば,しめたものです。
以外にシンプルなのでは?と思えた瞬間が,◎ゲットの瞬間です。
八角形を二分割して描くことを考えて,内側と外側を意識しすぎると◎ゲットには至りません。
Ver.1.2になって登場した,初級編「5.回廊と階段」の「3回繰り返し」を上手に使って,どれだけ無駄な動きを少なくするかがポイントです。
トレースする図形は,今まで何度も登場している「八角形」が基本です。この問題も中級編で散々登場した,次の動きを意識したコマンドの並べ方を考えてみましょう。
タイトルのイメージに引っ張られてしまい,旗の取り方の軌跡は
幼稚園児の描く「ギラギラした太陽」だ!
と想像してしまったため,なかなか完成しませんでした。
上級編「1.四隅の回廊」で学んだことを活かしてみましょう。
六角形の半分ではなく,八角形の半分の動きを狙って組み立てましょう。
左右に動くため,ループは2回必要です。
これも何度も登場している,次の動きを意識したコマンドの並べ方がポイント。
今までの経験からタイルを並べると,左右の移動タイルの枚数が足りないことに気付くはず。ここは発想の転換です。
(結果的に,左か右の移動タイルは余ります。)
形の上では「中級編 9.トゲトゲ」に通じる問題です。しかし,当然「トゲトゲ」よりも複雑です。
当然無駄な動きをしないためには,一歩目が肝心。
メガネのレンズにあたる部分は正八角形ではないので,それをどう描くかがポイント。
これは中級編「8.うずまき」とは逆で,ロボットの動きをいかに分断するかです。タイルを並べられる11個のスペースは,1個も無駄にできません。
もちろん,ここまでくれば次の動きを意識したコマンドの並べ方のテクニックは必須でしょう。
中級編「12.四葉」ができれば,あっさり解決すると思います。素直にコマンドを並べましょう。
中級編「12.四葉」のほうが難しいかも。
トレース図形をよく見てみると,アルゴロジックお得意の八角形の一部が組み合わせて構成されているのがわかります。
八角形といえば,「8.二つの三日月」「10.回転のこぎり」で養った繰り返しパターンをうまく使いましょう。
初見でびっくりします。(笑)
どうやって旗を全部取ろうか?と考えている間が一番楽しいはずです。
今までの問題でこれの基礎となる問題がありましたよね?
(多分)最後の一問ではないかと思います。じっくり楽しんでください。
Copyright - © Yamamoto Yasushi 2011 All Rights Reserved.