Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การจำลองหุ่นยนต์เดินใน Python


สมมติว่ามีหุ่นยนต์อยู่บนกริดอนันต์ที่เริ่มต้นที่จุด (0, 0) หันหน้าไปทางทิศเหนือ ตอนนี้หุ่นยนต์สามารถรับคำสั่งที่เป็นไปได้หนึ่งในสามประเภท -

  1. -2 เพื่อเลี้ยวซ้าย 90 องศา
  2. -1 เพื่อเลี้ยวขวา 90 องศา
  3. ค่าใดก็ได้ตั้งแต่ 1 ถึง 9 เพื่อเลื่อนไปข้างหน้า x หน่วย
  4. มีบางช่องสี่เหลี่ยมที่เป็นอุปสรรค

เรายังมีอาร์เรย์อื่นที่เรียกว่าสิ่งกีดขวาง ซึ่งบ่งชี้ว่าสิ่งกีดขวางที่ i อยู่ที่จุดกริด (obstacles[i][0],สิ่งกีดขวาง[i][1]) หากหุ่นยนต์ต้องการเคลื่อนที่เข้าหาพวกมัน หุ่นยนต์ก็จะยังคงอยู่ สี่เหลี่ยมตารางก่อนหน้าแทน

เราต้องหากำลังสองของระยะทางแบบยุคลิดสูงสุดที่หุ่นยนต์จะมาจากจุดกำเนิด

ดังนั้นหากอินพุตเป็นเหมือนคำสั่ง =[4,-1,4,-2,4] สิ่งกีดขวาง =[2,4]] ผลลัพธ์จะเป็น 65 เนื่องจากหุ่นยนต์จะติดอยู่ที่ (1, 4 ) ก่อนเลี้ยวซ้ายไปทาง (1, 8)

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • position_offset :=[(0, 1) ,(1, 0) ,(0, -1) ,(-1, 0) ]
  • เริ่มต้น x, y, ทิศทาง, max_distance เป็น 0
  • สำหรับแต่ละคำสั่งในคำสั่ง ทำ
    • ถ้าคำสั่งเหมือนกับ -2 แล้ว
      • ทิศทาง :=(ทิศทาง - 1) mod 4
    • มิฉะนั้น เมื่อคำสั่งเหมือนกับ -1 แล้ว
      • ทิศทาง :=(ทิศทาง + 1) mod 4
    • มิฉะนั้น
      • (x_off, y_off) :=position_offset[direction]
    • ในขณะที่คำสั่งไม่เป็นศูนย์ ให้ทำ
      • ถ้า (x + x_off, y + y_off) ไม่อยู่ในสิ่งกีดขวาง
        • x :=x + x_off
        • y :=y + y_off
      • คำสั่ง :=คำสั่ง - 1
    • max_distance =สูงสุดของ max_distance, x^2 + y^2
  • ส่งกลับ max_distance

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

class Solution:def robotSim(self, commands,อุปสรรค):position_offset =[(0, 1), (1, 0), (0, -1), (-1, 0)]สิ่งกีดขวาง =set(map (tuple, สิ่งกีดขวาง)) x, y, ทิศทาง, max_distance =0, 0, 0, 0 สำหรับคำสั่งในคำสั่ง:if command ==-2:direction =(direction - 1) % 4 คำสั่ง elif ==-1:ทิศทาง =(ทิศทาง + 1) % 4 อื่น:x_off, y_off =position_offset[direction] ขณะที่คำสั่ง:ถ้า (x + x_off, y + y_off) ไม่อยู่ในสิ่งกีดขวาง:x +=x_off y +=y_off command -=1 max_distance =max (max_distance, x**2 + y**2) return max_distanceob =Solution()print(ob.robotSim([4,-1,4,-2,4],[[2,4]])) 

อินพุต

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

ผลลัพธ์

65