Swift Playgrounds

コードを学ぼう2【決まった数だけスイッチを入れる】解答例と解説

決まった数だけスイッチを入れる

解答例

var gemCounter = 0
var switchCounter = 0

while !isOnClosedSwitch {
  while !isBlocked {
    if isOnGem {
      collectGem()
      gemCounter += 1
    }
    moveForward()
  }
  turnRight()
}

while switchCounter < gemCounter {
  while !isBlocked {
    if isOnClosedSwitch && switchCounter < gemCounter {
      toggleSwitch()
      switchCounter += 1
    }
    moveForward()
  }
  turnRight()
}

解説

複合代入演算子』が出てきました。
今まで、gemCounter = gemCounter + 1と書いてきましたが、
gemCounter += 1と書けますよ、ということです。
他にも、『-=』『*=』『/=』などがあります。
短く済みますし、慣れればわかりやすいのでぜひ積極的に使っていきましょう。
上記の解答例も、gemCounterとswitchCounterのところで使っています。

さて、今回の課題は前回のさらに応用です。
考え方としては、まず宝石カウンターとスイッチカウンターを変数で設置。
宝石ゾーンの終わりをどう定義するか、ですが
!isOnClosedSwitchとして、『offスイッチの上にいない限り』宝石を取ってカウントする、とします。

その後、前回同様『<』を使って、宝石カウンターとスイッチカウンターの数が同数になるまでwhileループします。
if isOnClosedSwitch && switchCounter < gemCounterとすることによって、
『offスイッチ上 かつ、 スイッチカウンターが宝石カウンターの数に達するまで』
角を曲がりながらスイッチを切り替え、カウントしていきます。
collectGem()と、toggleSwitch()
どちらもコードの後に、カウンターを設置して1を足すことを忘れないようにしましょう。

要点まとめ

・複合代入演算子(gemCounter += 1など)を使って、コードを簡潔にしよう