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.
Để 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 s [i] giống với "F", thì
- nếu r giống 0 và c giống 0, thì
- trả về True
- đối với tôi trong phạm vi từ 0 đến kích thước của s, thực hiện
- 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