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

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

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

ตัวอย่าง: moves = ['N','N','E','N','W','S'], coord = [0, -1] ผลลัพธ์คือ True

ขั้นตอนการแก้ปัญหา

  1. กำหนด nx = 0, ny = 0
  2. สร้างเซต l = {(0, 0)}
  3. สำหรับแต่ละ k ใน moves:
    • ถ้า k == "N": วนลูป while (nx, ny) in l ให้ ny += 1
    • ถ้า k == "S": วนลูป while (nx, ny) in l ให้ ny -= 1
    • ถ้า k == "E": วนลูป while (nx, ny) in l ให้ nx += 1
    • ถ้า k == "W": วนลูป while (nx, ny) in l ให้ nx -= 1
    • เพิ่ม (nx, ny) เข้า l
  4. คืนค่า True ถ้า coord == (nx, ny) มิฉะนั้น False

ตัวอย่างโค้ด Python

class Solution:
    def solve(self, moves, coord):
        nx = ny = 0
        visited = {(0, 0)}
        for k in moves:
            if k == "N":
                while (nx, ny) in visited:
                    ny += 1
            elif k == "S":
                while (nx, ny) in visited:
                    ny -= 1
            elif k == "E":
                while (nx, ny) in visited:
                    nx += 1
            else:  # "W"
                while (nx, ny) in visited:
                    nx -= 1
            visited.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))  # Output: True

อินพุต / เอาต์พุต

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

Output: True