在Python中编写检查机器人是否在有限框内移动的程序

在Python中编写检查机器人是否在有限框内移动的程序

假设我们有一个字符串s,代表一个机器人的动作。机器人当前位于(0, 0)的位置,朝向北方。移动字符串s可能包含以下字符

  • “F”代表向前移动一步
  • “L”代表向左旋转90度
  • “R”代表向右旋转90度

所以如果机器人按s中的顺序重复执行操作,则我们必须检查平面上是否有盒子机器人永远不会离开。

因此,如果输入是s = “FFRFRFFRF”,则输出为True,因为机器人向北移动2个单位。然后右转90度并移动一个块,然后再次右转90度并向南移动2个单位,然后再右转,因此这形成了一个盒子。

在Python中编写检查机器人是否在有限框内移动的程序

为了解决这个问题,我们将遵循以下步骤-

  • 移动:=一个包含方向的数组[[0, -1],[1, 0],[0, 1],[-1, 0]]
  • r,c:= 0,0
  • d:= 0
  • 对于从0到3的所有时间,执行以下操作
    • 对于i在范围0到s的大小,执行以下操作
      • 如果s[i]与“F”相同,则
      • (r,c):=(r + moves[d,0],c + moves[d,1])
      • 否则,当s[i]与“L”相同时,执行以下操作
      • d:=(d+3)%4
      • 否则,当s[i]与“R”相同时,执行以下操作
      • d:=(d+1)%4
    • 如果r = 0,且c = 0,则
      • 返回True
  • 返回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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程