スポンサーリンク
スポンサーリンク
解答例
while !isOnGem {
while !isOnClosedSwitch && !isOnGem {
moveForward()
}
if isOnClosedSwitch && isBlocked {
toggleSwitch()
turnLeft()
} else if isOnClosedSwitch {
toggleSwitch()
turnRight()
}
}
collectGem()
解説
今まで、いくつかwhile !isOnGem{}
のような形をやってきているので、
今回もゴールはそのように作ればいいかな、とすぐ気がついたかもしれません。
あとは、その中身です。
スイッチの上にくると右折か左折をすればいいみたいですね。
左折する時は『offスイッチの上 かつ 前方が行き止まり』
右折する時は『offスイッチの上』
と分類する事ができます。
『offスイッチの上にいない かつ 宝石の上にいない』時に前進し、スイッチのところで上記の判定をするように
whileループを作ればOKです。
今回の課題は、他にもいろいろな条件を定義する事ができます。
自分だけのアルゴリズムを作れるように、試行錯誤してみましょう。
whileループのネストをしなくても、ゴールできますね。
while !isOnGem {
moveForward()
if isOnClosedSwitch && !isBlocked {
toggleSwitch()
turnRight()
} else if isOnClosedSwitch {
toggleSwitch()
turnLeft()
}
}
collectGem()
これは一例です。
もっともっと、試してみてくださいね。
要点まとめ
・独自のアルゴリズムを作れるように、何度もトライしてみよう
スポンサーリンク