右手法というアルゴリズムの考え方自体は問題文に書かれています。これはプログラミング関係なく古くからある迷路攻略法で、「どちらかの壁(この場合は右)に触れたまま進むとどんな迷路でもいつかは出られる」というものです。本筋とは関係ないので、そういうものだと思って下さい。Playgroundsでは本当に壁に手を付けるわけではないのでピンと来づらいですが、ともあれ右側に壁に沿って進むというイメージです。考え方は説明図にある3パターンに落とし込んでくれていますので、その条件と処理内容をif文を組み合わせてコードにしていきます。
アルゴリズムを組み込んだfunc文が完成したら、それを呼び出すループを作ります。宝石回収は一旦おいておいて、右手法を使って最後まで進むように作ってみてください。コースの最後に閉スイッチがあることに着目し、それをゴール(到達条件)としたwhile文が良いでしょう。
きちんと閉スイッチまで辿り着けるようになったらナビゲーション処理は完成です。途中でもし宝石があったらゲットする処理を追加しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//右手法アルゴリズムを定義 func navigateAroundWall() { //右側がと正面がブロックされている→左を向く if isBlocked && isBlockedRight { turnLeft() //右側だけブロックされている→一歩前進 } else if isBlockedRight { moveForward() //それ以外(ブロックされていない)→右を向いて1歩前進 } else { turnRight() moveForward() } } //ルートの最後にある閉スイッチまで進むループ while !isOnClosedSwitch { //右手法を実行 navigateAroundWall() //宝石があれば回収 if isOnGem { collectGem() } } //最後にスイッチを開く toggleSwitch() |
経路がやや無駄な気もしますが、右手法とはそういうものなので問題ありません。