❏ ⅴ 論理演算子


⒈NOT演算子を使う

isBlocked(行き止まり)の条件がfalse(偽)になる場合、!isBlockedと書くと、true (真)になります。
! を使って、キャラクターが “宝石の上にいない” ことを条件にしています。
解答例

解答例

解説

for i in 1 ... 4 {
     moveForward( )
     if isOnGem {
         collectGem ()
     } else if !isonGem {
          turnLeft()
          moveForward()
          moveForward()
          collectGem()
          turnLeft()
          turnLeft()
          moveForward()
          moveForward()
          turnLeft()
     }
}
4回のループ {
    前に進む
    もし、宝石の上に居たら
        宝石を取る
    } そうでなくもし、宝石の上で無かったら {
         左を向く
         前に進む
         前に進む
         宝石を取る
         左を向く
         左を向く
         前に進む
         前に進む
         左を向く
    }
}

⒉ NOTで周る

NOT演算子 ! を使って、13個のマスを進む為に !isBlock の演算子を書きます。
13回ループして、最後にスイッチを入れます。
解答例

解答例

解説

for i in 1 ... 13 {
      if !isBlocked {
           moveForward()
      } else {
             turnLeft()
             moveForward()
             }
toggleSwitch()
13回のループ {
      もし、行き止まりで無かったら {
           前に進む
      } そうで無い場合 {
                     左を向く
                     前に進む
                    }
スイッチを入れる

⒊ 両方正しければ合格

一歩進んで もし、宝石の上に居て 左側がブロックされて居たら
if isonGem && isBlockeleft
の動作をループの中に書き込みます。

解答例

解説

for i in 1 ... 7 {
     moveForward()
     if isonGem && isBlockedLeft {
          collectGem()
          turnRight()
          moveForward()
          moveForward()
          toggleSwitch()
          turnLeft()
          turnLeft()
          moveForward()
          moveForward()
          turnRight()
      } else if isOnGem {
          collectGem()
     }
}
7回のループ {
       前に進む
       もし、宝石の上 そして 左が壁なら {
          宝石を取る
          右を向く
          前に進む
          前に進む
          スイッチを入れる
          左を向く
          左を向く
          前に進む
          前に進む
          右を向く
     } そうで無い場合 もし、宝石の上なら {
          宝石を取る
     }
}

⒋ 一方でも正しければ合格

OR演算子 || を使い、前が行き止まりになる場合と、左が行き止まりになる場合を考えます
→ どちらかが当てはまる場合は、右に曲がり、どちらも当てはまらない場合は、前に進む を12回繰り返して最後に宝石を取ります。

解答例

解説

for i in 1 ...12 {
   if isBlocked || isBlockedLeft {
       turnRight()
       moveForward()
      } else {
          moveForward()
      }
}
collectGem()
12回のループ {
     もし、行き止まり 又は 左が壁なら {
         右を向く
         前に進む
        } どちらでも無い場合 {
            前に進む
        }
}
宝石を取る

⒌ 論理の迷宮

パターン1=宝石の上、スイッチが切れている、右に宝石がある
パターン2=スイッチが切れていて前が行き止まりー右に曲がらなくてはいけない
パターン3=宝石がある
パターン4=スイッチが付いている→ないない何もしなくて良い

解答例

解説

for i in 1 ... 8 {
  moveForward()
  if isonGem && isOnClosedSwitch {
          collectGem()
          turnRight()
          moveForward()
          moveForward()
          collectGem()
          turnRight()
          turnRight()
          moveForward()
          moveForward()
          toggleSwitch()
          turnRight()
      } else if isOnClosedSwitch {
           toggleSwitch()
           turnLeft()
      }
      if isOnGem {
          collectGem()
      }
}
8回のループ {
前に進む
もし、宝石の上 + スイッチが切れている場合 {
    宝石を取る
    右を向く
    前に進む
    前に進む
    宝石を取る
    右を向く
    右を向く
    前に進む
    前に進む
    スイッチを入れる
    右を向く
  } そうで無く もし、スイッチが切れていたら {
    スイッチを入れる
    左を向く
  }
  もし、宝石の上なら {
    宝石を取る
  }
}

コメント