スポンサーリンク
スポンサーリンク
解答例
let totalGems = randomNumberOfGems
var gemCounter = 0
bluePortal.isActive = false
pinkPortal.isActive = false
while gemCounter < totalGems {
if isOnGem {
collectGem()
gemCounter += 1
}
moveForward()
if isBlocked {
turnLeft()
turnLeft()
if bluePortal.isActive == true {
bluePortal.isActive = false
pinkPortal.isActive = false
} else if bluePortal.isActive == false {
bluePortal.isActive = true
pinkPortal.isActive = true
}
}
}
解説
『型』の最後の問題です。難しいですね。
この解答例では、『==』をifの条件として使っているところがポイントです。
『==』は、『比較演算子』というのでしたね。
以前出てきた時は、宝石の数を比較するときなどに使ったと思います。
while gemCounter < 7{}
のような感じでした。
この『7』というのは整数、つまり『Int型』で表されています。
そして今回は『true』や『false』なので、『Bool型』ですね。
比較演算子を使ったブール型の場合でも、if文が使えるんでしたね。
ドット表記の構文が使われていても、同様に条件としてOKです。
ちょっとここで、比較演算子を復習しておきましょう。
より小さい | (a < b)と書くと、aがbよりも小さい場合にtrue(真) |
---|---|
より大きい | (a > b)と書くと、aがbよりも大きい場合にtrue(真) |
等しい | (a == b)と書くと、aとbが等しい場合にtrue(真) |
等しくない | (a != b)と書くと、aとbが等しくない場合にtrue(真) |
行き止まりに到達するたびに
ブルーのワープがonの時、ブルーとピンクのワープをoff、
ブルーのワープがoffの時、ブルーとピンクのワープをonにすると
全体をくまなく周ることができますね。
【その2】
let totalGems = randomNumberOfGems
var gemCounter = 0
while totalGems > gemCounter {
moveForward()
if isOnGem {
collectGem()
gemCounter += 1
}
if isBlocked {
turnRight()
turnRight()
if pinkPortal.isActive == true {
pinkPortal.isActive = false
} else if pinkPortal.isActive == false {
pinkPortal.isActive = true
}
if bluePortal.isActive == true {
bluePortal.isActive = false
} else if bluePortal.isActive == false {
bluePortal.isActive = true
}
}
}
要点まとめ
・ドット表記、比較演算子などを組み合わせて効果的なアルゴリズムを考えよう
スポンサーリンク