Swift Playgrounds

コードを学ぼう1【アルゴリズムを直す】解答例と解説

アルゴリズムを直す

解答例

func navigateAroundWall() {
  if isBlockedRight && isBlocked {
    turnLeft()
  } else if  isBlockedRight {
    moveForward()
  } else {
    turnRight()
    moveForward()
  }
}
    
while !isOnClosedSwitch {
  navigateAroundWall()
  if isOnGem {
    collectGem()
  }
}

toggleSwitch()

解説

実行するたび、少しずつフィールドが変化するようです。
右手法で行けば良さそうですが、前回と同じようにするとうまく行かない場面が出てきます。
『疑似コード』を使って考えましょう、とあるので、書いてみます。

壁を周って進む {
  右側が行き止まり かつ 前方が行き止まり {
    左折
  } 右側だけ行き止まり {
    前進
  } それ以外 {
    右折
    前進
  }
}
offスイッチ上でない限り {
  壁を周って進む
  宝石の上なら {
    宝石を取る
  }
}
スイッチを切り替える

AND演算子(&&)を使うことにより、右と前方が行き止まりの場合の条件をつける事ができました。
ちなみに、if文の『else ifは、複数使っても大丈夫です。
以下のような感じになります。


if 条件1 {
  実行する内容
  } else if 条件2 {
    実行する内容
  } else if 条件3 {
    実行する内容
  } else {
  実行する内容
}

このような感じになります。そして、最後のelseは省略可能です。

要点まとめ

・うまくいかない時は、もうひとつ条件を付け加えて新しいアルゴリズムを作ってみよう