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

โปรแกรมค้นหาตำแหน่งที่ลูกบอลตกลงมาในกล่องกริดใน Python


สมมติว่าเราได้รับกล่องกริดขนาด ม. x น. โดยที่แต่ละเซลล์มีบอร์ดที่วางตำแหน่งจากมุมบนขวาไปซ้ายล่างสุด หรือจากด้านบนซ้ายไปขวาล่าง จากเซลล์ด้านบนสุด ลูกบอลถูกใส่เข้าไปในกล่อง และเราต้องตรวจสอบว่าลูกบอลนั้นไปถึงด้านล่างของกล่องหรือไม่ ตารางจะถูกกำหนดเป็นเมทริกซ์ หากเซลล์ถูกทำเครื่องหมาย 1 แผ่นกระดานแนวทแยงจะขยายจากด้านซ้ายบนไปยังด้านขวาล่าง หากมีเครื่องหมาย -1 จะขยายจากมุมบนขวาไปยังมุมล่างซ้าย หากใส่ลูกบอลเข้าไปในกล่อง n ลูก เราต้องหาว่าลูกลงไปถึงด้านล่างกี่ลูก

โปรแกรมค้นหาตำแหน่งที่ลูกบอลตกลงมาในกล่องกริดใน Python

ตัวอย่างช่องตาราง 3x3

ดังนั้นหากอินพุตเป็นเหมือน mat =

1 1 1 -1
-1 1 1 -1
1 -1 -1 1
1 -1 1 -1

จากนั้นผลลัพธ์จะเป็น [-1, -1, -1, -1]

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

  • i :=จำนวนแถวใน mat

  • j :=จำนวนคอลัมน์ใน mat

  • res :=รายการใหม่

  • สำหรับค่าที่อยู่ในช่วง 0 ถึง j ให้ทำ

    • x :=วาล

    • สำหรับ r ในช่วง 0 ถึง i ให้ทำ

      • s :=mat[r, x]

      • x :=x + mat[r, x]

      • ถ้า x <0 หรือ x>=j หรือ mat[r, x] ไม่เหมือนกับ s แล้ว

        • เพิ่มองค์ประกอบ -1 ที่ส่วนท้ายของ res

        • ออกจากวง

    • มิฉะนั้น

      • เติม x ต่อท้าย res

  • ผลตอบแทน

ตัวอย่าง

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

def solve(mat):
   i, j = map(len, (mat, mat[0]))
   res = []
   for val in range(j):
      x = val
      for r in range(i):
         s = mat[r][x]
         x += mat[r][x]
         if x < 0 or x >= j or mat[r][x] != s:
            res += [-1]
            break
      else:
         res += [x]
   return res

print(solve([[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]))

อินพุต

[[1, 1, 1, -1], [-1, 1, 1, -1], [1, -1, -1, 1],[1, -1, 1, -1] ]

ผลลัพธ์

[-1, -1, -1, -1]