Swift Playgrounds

コードを学ぼう1【右に行くか、左に行くか】解答例と解説

右へ行くか、左へ行くか

解答例

while !isOnOpenSwitch {
  moveForward()
  if isOnGem {
    collectGem()
    turnRight()
    moveForward()
    collectGem()
  } else if isOnClosedSwitch {
    toggleSwitch()
    turnLeft()
    moveForward()
    toggleSwitch()
  }
  while !isBlocked {
    moveForward()
  }
  if !isBlockedRight {
    turnRight()
  } else {
    turnLeft()
  }
}

解説

いよいよ、コードを学ぼう1の最後の問題ですね。
宝石とスイッチが、2つずつかたまりで置かれていて
ゴールはonスイッチのところかな、とわかりますね。
この解答例では、全体を

while !isOnOpenSwitch {}

で囲み、『onスイッチ上でない限り』とします。
こうすると、onスイッチ上に来ると条件を外れ、ゴールになります。

あとはその中身ですが、『もし宝石上なら』宝石を取って右に進み、もうひとつ取る、
そうではなく、もしoffスイッチ上なら』スイッチを切り替えて左に進み、またスイッチを切り替える、
とします。
あと、曲がり角の処理をwhileループで作ります。
この辺は、様々なやり方があると思います。

解答例その2
もし宝石上なら宝石を取り、offスイッチ上なら切り替える』という関数を作ってやってみました。
曲がる場合の条件も、&&を使う事ができますね。
もし前方が行き止まり、かつ、左も行き止まりなら』右折、
前方だけが行き止まりなら』左折、
それ以外なら』関数を実行し、前進します。

他にも例えば、『宝石上なら右折』なども条件にできそうですね。
色々試してみてください!

そして、次はいよいよ『コードを学ぼう2』に入ります。
一緒に頑張りましょう!!
でもだんだん難しくなるので、もし自信がなければ
もう一度『コードを学ぼう1』をやってみてもいいかと思います。
復習すると、記憶の定着がしっかりするのでおすすめです(⌒▽⌒)

func collectOrToggle() {
  if isOnGem {
    collectGem()
  } else if isOnClosedSwitch {
    toggleSwitch()
  }
}

while !isOnOpenSwitch {
  if isBlocked && isBlockedLeft {
    turnRight()
  } else if isBlocked {
    turnLeft()
  } else {
    collectOrToggle()
    moveForward()
  }
}
要点まとめ

・自分の得意なコード以外も、積極的に使って作ってみよう