Swift Playgrounds

コードを学ぼう1【右手法】解答例と解説

右手法

解答例

func navigateAroundWall() {
  if isBlockedRight {
    moveForward()
  } else {
    turnRight()
    moveForward()
  }
}
    
while !isOnClosedSwitch {
  navigateAroundWall()
  if isOnGem {
    collectGem()
    turnLeft()
    turnLeft()
  }
}

toggleSwitch()

解説

右手法、アルゴリズム、疑似コード、、、また新しい言葉が出てきましたね。
一つずつ見ていきましょう。

右手法とは、迷路を解くためのアルゴリズムでよく使われる規則の1つで、
キャラクターの右側に常に壁があるようにして進む方法。

アルゴリズムは、問題を解くための一つひとつのステップに関する
指示やルールをまとめたものです。
例えば、お茶を入れる手順のリストはアルゴリズムと考えることができます。

疑似コードはアルゴリズムを人が読める形で記述したもので、
通常は、日常的に使用する言葉やコードを組み合わせて書きます。

というわけで、右手法のアルゴリズムを使って、下記の疑似コードを参考に組み立てます。

壁を周って進む {
  もし右が行き止まりならば {
    進む
    } そうでなければ {
    右を向く
    進む
   }
}
切れているスイッチの上にいない間は {
  壁を周って進む
    もし宝石の上にいるならば {
      宝石を取る
      右を向く
  }
}
スイッチを切り替える

課題に書いてある『右を向く』の場所は、『振り返る』でいいんじゃないかなぁと思います。
右手法は、ずっと右手が壁についたまま歩くイメージなので、
turnLeft()を2回にしています。

要点まとめ

・疑似コードを書いてみると、やりたい事が分かりやすくなる