สมมติว่าเรามีสตริง s ซึ่งแสดงถึงการเคลื่อนไหวของหุ่นยนต์ ขณะนี้หุ่นยนต์อยู่ที่ตำแหน่ง (0, 0) และกำลังหันหน้าไปทางทิศเหนือ สตริงการย้ายอาจมีอักขระเหล่านี้
- "F" เพื่อก้าวไปข้างหน้าหนึ่งหน่วย
- "L" เพื่อหมุนไปทางซ้าย 90 องศา
- "R" เพื่อหมุนไปทางขวา 90 องศา
ดังนั้นหากหุ่นยนต์เคลื่อนที่ซ้ำๆ ตามลำดับ เราต้องตรวจสอบว่ามีกล่องบางกล่องในเครื่องบินที่หุ่นยนต์ไม่เคยออกหรือไม่
ดังนั้น หากอินพุตเป็น s ="FFFRFRFFRF" เอาต์พุตจะเป็น True เนื่องจากหุ่นยนต์เคลื่อนที่ 2 หน่วยไปทางทิศเหนือ จากนั้นเลี้ยวขวา 90 ย้ายหนึ่งบล็อก จากนั้นหมุนอีกครั้ง 90 องศาไปทางขวาแล้วย้าย 2 หน่วยไปทางใต้แล้วไปทางขวาอีกครั้ง นี่จึงกลายเป็นกล่อง
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ย้าย :=อาร์เรย์ที่มีทิศทาง [[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
- ถ้า s[i] เหมือนกับ "F" แล้ว
- ถ้า r เหมือนกับ 0 และ c เหมือนกับ 0 แล้ว
- คืนค่า True
- สำหรับฉันในช่วง 0 ถึงขนาดของ s ทำ
- คืนค่าเท็จ
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
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