Swift Playgrounds

コードを学ぼう1【論理の迷宮】解答例と解説

論理の迷宮

解答例

for i in 1 ... 8 {
  moveForward()
  if isOnGem && isOnClosedSwitch {
    turnRight()
    moveForward()
    moveForward()
    collectGem()
    turnLeft()
    turnLeft()
    moveForward()
    moveForward()
    turnRight()
    collectGem()
    toggleSwitch()
  } else if isOnClosedSwitch {
      toggleSwitch()
      turnLeft()
  }
  if isOnGem {
    collectGem()
  }
}

解説

8マス進んだら、ゴール。
その中で、①右に進んだ先の宝石を取ってくる、②スイッチを押して左を向く、③宝石を取る
の3パターンがあると気付きます。
if isOnGem && isOnClosedSwitchで、①の処理
else if isOnClosedSwitchで、②の処理
if isOnGemで、③の処理をします。
ぱっと見複雑なので、よく考えないと分かりませんが
『2歩先に宝石がある』とか『曲がり角はいつもoff Switchがある』など
まとめることができる法則に気付きましょう。
一番単純なルート ➕ 小さな固まり に気づくと、完成できます。

めっちゃ難しいですね。
ゴールしたら、このようなメッセージが現れます。

おめでとうございます!
論理演算子が終わりました。がんばったのですから、両手を挙げて、〝やった!〟と叫んでお祝いしましょう!

ここまで来ると、かなり達成感ありますね(⌒▽⌒)

要点まとめ

・NOT演算子(!) コードのブール値を逆にする

・AND演算子(&&) 2つのブール値が両方ともtrueならtrueになる

・OR演算子(||) 2つのブール値の一方、または両方がtrueならtrueになる