Python程式:檢查機器人是否在邊界框內移動


假設我們有一個字串s,它表示機器人的移動。機器人當前位於(0, 0)位置,面向北方。移動字串s可能包含以下字元:

  • "F" 向前移動一個單位
  • "L" 左轉90度
  • "R" 右轉90度

因此,如果機器人按照順序重複執行s中的移動,我們必須檢查是否存在平面上的某個盒子,機器人永遠不會離開該盒子。

例如,如果輸入為s = "FFRFRFFRF",則輸出為True,因為機器人向北移動2個單位,然後右轉90度並移動一個單位,然後再次右轉90度並移動2個單位向南,然後再次右轉,這就形成了一個盒子。

為了解決這個問題,我們將遵循以下步驟:

  • moves := 一個包含方向的陣列 [[0, -1], [1, 0], [0, 1], [-1, 0]]
  • r, c := 0, 0
  • d := 0
  • for times in range(0, 3):
    • for i in range(0, len(s)):
      • if s[i] == "F":
        • (r, c) := (r + moves[d][0], c + moves[d][1])
      • elif s[i] == "L":
        • d := (d + 3) % 4
      • elif s[i] == "R":
        • d := (d + 1) % 4
    • if r == 0 and c == 0:
      • return True
  • return False

示例

讓我們看看下面的實現,以便更好地理解:

def solve(s):
   moves = [[0, -1], [1, 0], [0, 1], [-1, 0]]
   r, c = 0, 0
   d = 0

   for times in range(4):
      for i in range(len(s)):
         if s[i] == "F":
            r, c = r + moves[d][0], c + moves[d][1]
         elif s[i] == "L":
            d = (d + 3) % 4
         elif s[i] == "R":
            d = (d + 1) % 4
      if r == 0 and c == 0:
         return True
   return False

s = "FFRFRFFRF"
print(solve(s))

輸入

"FFRFRFFRF"

輸出

True

更新於:2021年10月16日

248 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.