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

โปรแกรมตรวจสอบหุ่นยนต์สามารถเข้าถึงเป้าหมายโดยเคลื่อนที่ไปยังจุดที่เยี่ยมชมใน Python


สมมติว่าเรามีหุ่นยนต์ซึ่งกำลังนั่งอยู่ในตำแหน่ง (0, 0) (เครื่องบินคาร์ทีเซียน) ถ้าเรามีรายชื่อการเคลื่อนไหวที่สามารถทำได้ ประกอบด้วย N(เหนือ), S(ใต้), W(ตะวันตก) และ E(ตะวันออก) อย่างไรก็ตาม หากหุ่นยนต์ไปถึงจุดที่มันเคยอยู่มาก่อน มันจะเคลื่อนที่ไปในทิศทางเดียวกันจนกว่าจะถึงจุดใหม่ที่ไม่มีใครมาเยี่ยม เราต้องเช็คก่อนว่าเคลื่อนที่แล้วจะสิ้นสุดที่ (x, y) พิกัดหรือไม่

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมตรวจสอบหุ่นยนต์สามารถเข้าถึงเป้าหมายโดยเคลื่อนที่ไปยังจุดที่เยี่ยมชมใน Python

ย้าย =['N','N','E','N','W','S'], coord =[0, -1] จากนั้นผลลัพธ์จะเป็น True เนื่องจากหุ่นยนต์จะไปสอง ขึ้น ขวา หนึ่ง ขึ้นอีกครั้ง หนึ่งซ้าย และหนึ่งลง เมื่อตำแหน่งปัจจุบันถูกลง มันจะลงไป แล้วที่นั้นก็เยี่ยมชม ลงอีกครั้ง หยุดที่ตำแหน่ง (0, −1)

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

  • ny :=0, nx :=0

  • l :=ชุดใหม่ เริ่มแทรกพิกัด (0, 0)

  • สำหรับแต่ละ k ในการเคลื่อนไหว ทำ

    • ถ้า k เหมือนกับ "N" แล้ว

      • ในขณะที่ (nx, ny) ใน l ทำ

        • ny :=ny + 1

    • มิฉะนั้นเมื่อ k เหมือนกับ "S" แล้ว

      • ในขณะที่ (nx, ny) ใน l ทำ

        • ny :=ny − 1

    • มิฉะนั้นเมื่อ k เหมือนกับ "E" แล้ว

      • ในขณะที่ (nx, ny) ใน l ทำ

        • nx :=nx + 1

    • มิฉะนั้น

      • ในขณะที่ (nx, ny) ใน l ทำ

        • nx :=nx − 1

    • เพิ่ม (nx, ny) ลงใน l

  • คืนค่า จริง เมื่อ coord เหมือนกับ (nx, ny) มิฉะนั้น เท็จ

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

ตัวอย่าง

class Solution:
   def solve(self, moves, coord):
      ny = nx = 0
      l = {(0, 0)}
      for k in moves:
         if k == "N":
            while (nx, ny) in l:
               ny += 1
         elif k == "S":
            while (nx, ny) in l:
               ny -= 1
         elif k == "E":
            while (nx, ny) in l:
               nx += 1
         else:
            while (nx, ny) in l:
               nx -= 1
         l.add((nx, ny))
      return coord[0] == nx and coord[1] == ny

ob = Solution()
moves = ['N','N','E','N','W','S']
coord = [0,-1]
print(ob.solve(moves, coord))

อินพุต

['N','N','E','N','W','S'], [0,-1]

ผลลัพธ์

True