在Python中编写检查机器人是否在有限框内移动的程序
假设我们有一个字符串s,代表一个机器人的动作。机器人当前位于(0, 0)的位置,朝向北方。移动字符串s可能包含以下字符
- “F”代表向前移动一步
- “L”代表向左旋转90度
- “R”代表向右旋转90度
所以如果机器人按s中的顺序重复执行操作,则我们必须检查平面上是否有盒子机器人永远不会离开。
因此,如果输入是s = “FFRFRFFRF”,则输出为True,因为机器人向北移动2个单位。然后右转90度并移动一个块,然后再次右转90度并向南移动2个单位,然后再右转,因此这形成了一个盒子。
为了解决这个问题,我们将遵循以下步骤-
- 移动:=一个包含方向的数组[[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
- 对于i在范围0到s的大小,执行以下操作
- 返回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