Swift Playgrounds

コードを学ぼう1【2つのループ】解答例と解説

2つのループ

解答例

for i in 1 ... 4 {
  moveForward()
  moveForward()
  moveForward()
  if isOnClosedSwitch {
    toggleSwitch()
  }
  turnRight()
}

解説

ワープがあるので複雑に見えるかもしれませんが、
3マス進んで『もしスイッチがoffならスイッチを切り替える』という条件をつけ、
最後に右を向くと1方向分が解決します。
それを、4回繰り返すだけです。

また、問題文に、『いろいろと試してみてくださいね!』とあるので、
whileループでも作ってみましょう。

while !isBlocked {
  moveForward()
  moveForward()
  moveForward()
  if isOnClosedSwitch {
    toggleSwitch()
  }
  turnRight()
}

!isBlockedは、『行き止まりになるまで(〜する)』でしたね。
あとはforループと同様に繰り返します。

問題文に、以下のように書いてあります。

whileループを使うことも、forループを使うことも、この両方を組み合わせることもできます。

せっかくなので、両方組み合わせてみます。

func solveRow() {
  for i in 1 ... 3 {
    moveForward()
  }
  if isOnClosedSwitch {
    toggleSwitch()
  }
  turnRight()
}

while !isBlocked {
  solveRow()
}

関数の中にforループを入れて、それをwhileループで活用してみました。
このように、色々なやり方に挑戦して、最適なやり方を見つけることができればいいですね。

要点まとめ

・whileループ、forループを使って様々な解決方法を見つけてみよう