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

ย้าย =['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