สมมติว่าเรามีหุ่นยนต์ซึ่งกำลังนั่งอยู่ในตำแหน่ง (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