Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình kiểm tra xem rô bốt có di chuyển bên trong một hộp bị giới hạn hay không bằng Python

Giả sử chúng ta có một chuỗi s, đại diện cho các bước di chuyển của rô bốt. Robot hiện đang ở vị trí (0, 0) và hướng về phía bắc. Chuỗi di chuyển s có thể có các ký tự này

  • "F" để di chuyển về phía trước, một đơn vị
  • "L" để xoay 90 độ sang trái
  • "R" để xoay 90 độ sang phải

Vì vậy, nếu rô bốt liên tục thực hiện các bước di chuyển theo thứ tự, chúng ta phải kiểm tra xem có hộp nào đó trên mặt phẳng mà rô bốt không bao giờ rời đi hay không.

Vì vậy, nếu đầu vào là s =​​"FFRFRFFRF", thì đầu ra sẽ là Đúng, vì rô bốt di chuyển 2 đơn vị về phía bắc. sau đó, sau đó quay sang phải 90 độ và di chuyển một khối, sau đó lại xoay sang phải 90 độ và di chuyển 2 đơn vị về phía nam rồi lại sang phải, như vậy đây là hình hộp.

Chương trình kiểm tra xem rô bốt có di chuyển bên trong một hộp bị giới hạn hay không bằng Python

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • di chuyển:=một mảng chứa các hướng [[0, -1], [1, 0], [0, 1], [-1, 0]]
  • r, c:=0, 0
  • d:=0
  • đối với các lần trong phạm vi từ 0 đến 3, hãy thực hiện
    • đối với tôi trong phạm vi từ 0 đến kích thước của s, thực hiện
      • nếu s [i] giống với "F", thì
        • (r, c):=(r + di chuyển [d, 0], c + di chuyển [d, 1])
      • ngược lại khi s [i] giống với "L" thì
        • d:=(d + 3) mod 4
      • ngược lại khi s [i] giống với "R" thì
        • d:=(d + 1) mod 4
    • nếu r giống 0 và c giống 0, thì
      • trả về True
  • trả về Sai

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

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))

Đầu vào

"FFRFRFFRF"

Đầu ra

True