Swift Playgrounds

コードを学ぼう1【繰り返しを探す】解答例と解説

繰り返しを探す

解答例

func turnAndMove3() {
  turnRight()
  moveForward()
  moveForward()
  moveForward()
}

func solveRightSide() {
  collectGem()
  turnAndMove3()
  turnLeft()
  moveForward()
  collectGem()
  turnLeft()
  turnLeft()
  moveForward()
  turnAndMove3()
  turnRight()
}

for i in 1 ... 5 {
  moveForward()
  if isOnGem {
    solveRightSide()
    } else if isOnClosedSwitch {
    toggleSwitch()
    turnLeft()
    moveForward()
    collectGem()
    turnLeft()
    turnLeft()
    moveForward()
    turnLeft()
  }
}

解説

画像を見ると、少し角度が悪くてどのようになっているのかよく分かりません。
なので、クリックしたまま左右に動かし、何コマ進めばいいのか確認してみましょう。
それから、何度か実行してみると、この課題ではスイッチや宝石はランダムではないようです。

全体的に見て、5歩進めばゴール。
その内、宝石がある場合は、右側の宝石を取ってくるコード、
切れたスイッチがある場合は、左にある宝石を取ってくるコードを作ればいいですね。
まずは関数で、右側を処理するsolveRightSide()を作ります。
あとは、前進を5回繰り返し、『もし宝石があれば』右側の宝石を取ってくるコード(solveRightSide())、
『宝石はないがoffスイッチの上にいる場合』は、スイッチをonして左側の宝石を取ってくるコードを作ります。

ちなみに、関数で作った、右側を処理する中に宝石が出てきますが、
その中の宝石の上に来たからと言って、またsolveRightSide()が作用する訳ではありません。

要点まとめ

・どのような状態にいるのかで、条件分岐することができる