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

Mô phỏng Robot đi bộ bằng Python

Giả sử có một rô bốt trên một lưới vô hạn bắt đầu từ điểm (0, 0). Nó đang quay mặt về hướng bắc. Giờ đây, rô bốt có thể nhận một trong ba loại lệnh có thể có -

  1. -2 để rẽ trái 90 độ
  2. -1 để rẽ phải 90 độ
  3. bất kỳ giá trị nào từ 1 đến 9 để tiến lên x đơn vị
  4. Có một số ô lưới là chướng ngại vật.

Chúng tôi cũng có một mảng khác được gọi là chướng ngại vật, điều này cho biết chướng ngại vật thứ i đang ở điểm lưới (chướng ngại vật [i] [0], chướng ngại vật [i] [1]), nếu rô bốt muốn di chuyển lên chúng, rô bốt sẽ tiếp tục hình vuông lưới trước đó thay vào đó.

Chúng ta phải tìm bình phương của khoảng cách Euclid tối đa mà robot sẽ đến từ điểm gốc.

Vì vậy, nếu đầu vào giống như các lệnh =[4, -1,4, -2,4], chướng ngại vật =[[2,4]], thì đầu ra sẽ là 65, vì rô bốt sẽ bị kẹt ở (1, 4 ) trước khi rẽ trái và đi đến (1, 8).

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

  • position_offset:=[(0, 1), (1, 0), (0, -1), (- 1, 0)]
  • khởi tạo x, y, hướng, max_distance bằng 0
  • đối với mỗi lệnh trong các lệnh, hãy thực hiện
    • lệnh if giống với -2, then
      • hướng:=(hướng - 1) mod 4
    • ngược lại khi lệnh giống -1, thì
      • hướng:=(hướng + 1) mod 4
    • nếu không,
      • (x_off, y_off):=position_offset [hướng]
    • lệnh while khác 0, do
      • nếu (x + x_off, y + y_off) không gặp chướng ngại vật thì
        • x:=x + x_off
        • y:=y + y_off
      • command:=command - 1
    • max_distance =tối đa của max_distance, x ^ 2 + y ^ 2
  • trả về max_distance

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

Ví dụ

 class Giải pháp:def robotSim (tự, lệnh, chướng ngại vật):position_offset =[(0, 1), (1, 0), (0, -1), (-1, 0)] chướng ngại vật =set (bản đồ (tuple, chướng ngại vật)) x, y, hướng, max_distance =0, 0, 0, 0 cho lệnh trong các lệnh:lệnh if ==-2:hướng =(hướng - 1)% 4 lệnh elif ==-1:hướng =(hướng + 1)% 4 khác:x_off, y_off =position_offset [hướng] lệnh while:nếu (x + x_off, y + y_off) không có chướng ngại vật:x + =x_off y + =lệnh y_off - =1 max_distance =max (max_distance, x ** 2 + y ** 2) return max_distanceob =Solution () print (ob.robotSim ([4, -1,4, -2,4], [[2,4]]))  

Đầu vào

 [4, -1,4, -2,4], [[2,4]] 

Đầu ra

 65