Swift Playgrounds

コードを学ぼう1【どっちの手を使う?】解答例と解説

どっちの手を使う?

解答例

while !isOnGem {
  while !isOnClosedSwitch && !isOnGem {
    moveForward()
  }
  if isOnClosedSwitch && isBlocked {
    toggleSwitch()
    turnLeft()
  } else if isOnClosedSwitch {
    toggleSwitch()
    turnRight()
  }
}

collectGem()

解説

今まで、いくつかwhile !isOnGem{}のような形をやってきているので、
今回もゴールはそのように作ればいいかな、とすぐ気がついたかもしれません。
あとは、その中身です。
スイッチの上にくると右折か左折をすればいいみたいですね。
左折する時は『offスイッチの上 かつ 前方が行き止まり
右折する時は『offスイッチの上
と分類する事ができます。
offスイッチの上にいない かつ 宝石の上にいない』時に前進し、スイッチのところで上記の判定をするように
whileループを作ればOKです。

今回の課題は、他にもいろいろな条件を定義する事ができます。
自分だけのアルゴリズムを作れるように、試行錯誤してみましょう。
whileループのネストをしなくても、ゴールできますね。

while !isOnGem {
  moveForward()
  if isOnClosedSwitch && !isBlocked {
    toggleSwitch()
    turnRight()
  } else if isOnClosedSwitch {
    toggleSwitch()
    turnLeft()
  }
}

collectGem()

これは一例です。
もっともっと、試してみてくださいね。

要点まとめ

・独自のアルゴリズムを作れるように、何度もトライしてみよう