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

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


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

  • "F" เพื่อก้าวไปข้างหน้าหนึ่งหน่วย
  • "L" เพื่อหมุนไปทางซ้าย 90 องศา
  • "R" เพื่อหมุนไปทางขวา 90 องศา

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

ดังนั้น หากอินพุตเป็น s ="FFFRFRFFRF" เอาต์พุตจะเป็น True เนื่องจากหุ่นยนต์เคลื่อนที่ 2 หน่วยไปทางทิศเหนือ จากนั้นเลี้ยวขวา 90 ย้ายหนึ่งบล็อก จากนั้นหมุนอีกครั้ง 90 องศาไปทางขวาแล้วย้าย 2 หน่วยไปทางใต้แล้วไปทางขวาอีกครั้ง นี่จึงกลายเป็นกล่อง

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

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

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

ตัวอย่าง

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

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