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

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

สมมติว่าเรามีสตริง s แสดงการเคลื่อนที่ของหุ่นยนต์ หุ่นยนต์อยู่ที่ (0, 0) หันหน้าไปทางเหนือ สตริง s อาจมีตัวอักษร:

  • "F" เดินหน้าหนึ่งหน่วย
  • "L" หมุนซ้าย 90 องศา
  • "R" หมุนขวา 90 องศา

ถ้าหุ่นยนต์ทำตามการเคลื่อนที่ใน s ซ้ำๆ เราต้องตรวจสอบว่ามีกล่องในระนาบที่หุ่นยนต์ไม่เคยออกจากไปหรือไม่

เช่น ถ้าอินพุตคือ s = "FFRFRFFRF" ผลลัพธ์จะเป็น True เพราะหุ่นยนต์เดิน 2 หน่วยทางเหนือ หันขวา เดิน 1 บล็อก หันขวา เดิน 2 หน่วยทางใต้ หันขวา อีกครั้ง สร้างเป็นกล่อง

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

  1. moves := อาร์เรย์ทิศทาง [[0, -1], [1, 0], [0, 1], [-1, 0]]
  2. r, c := 0, 0, d := 0
  3. สำหรับ times ในช่วง 0 ถึง 3:
    • สำหรับ i ในช่วง 0 ถึง ขนาดของ s:
      • ถ้า s[i] == "F" ให้ (r, c) := (r + moves[d][0], c + moves[d][1])
      • มิฉะนั้นถ้า s[i] == "L" ให้ d := (d + 3) % 4
      • มิฉะนั้นถ้า s[i] == "R" ให้ d := (d + 1) % 4
    • ถ้า r == 0 และ c == 0 คืนค่า True
  4. คืนค่า False

ตัวอย่างการใช้งาน

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))

อินพุต

"FFRFRFFRF"

เอาต์พุต

True