Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm vị trí quả bóng tiếp đất trong một hộp lưới bằng Python

Giả sử, chúng ta được cung cấp một hộp lưới m x n, trong đó mỗi ô có một bảng được đặt từ trên cùng bên phải sang dưới cùng bên trái hoặc từ trên cùng bên trái đến dưới cùng bên phải. Bây giờ từ các ô trên cùng, một quả bóng được đưa vào hộp và chúng ta phải kiểm tra xem quả bóng đó có chạm đến đáy hộp hay không. Lưới được đưa ra dưới dạng ma trận. Nếu một ô được đánh dấu 1, bảng đường chéo kéo dài từ trên cùng bên trái sang dưới cùng bên phải; nếu nó được đánh dấu -1 thì nó kéo dài từ góc trên bên phải đến góc dưới bên trái. Nếu bỏ n viên bi vào hộp thì ta phải tính xem có bao nhiêu viên bi chạm đáy.

Chương trình tìm vị trí quả bóng tiếp đất trong một hộp lưới bằng Python

Ví dụ về hộp lưới 3x3.

Vì vậy, nếu đầu vào giống như mat =

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

thì đầu ra sẽ là [-1, -1, -1, -1]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • i:=số hàng trong thảm

  • j:=số cột trong mat

  • res:=một danh sách mới

  • cho val trong phạm vi từ 0 đến j, thực hiện

    • x:=val

    • đối với r trong phạm vi 0 đến i, thực hiện

      • s:=mat [r, x]

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

      • nếu x <0 hoặc x> =j hoặc mat [r, x] không giống với s thì

        • thêm phần tử -1 vào cuối res

        • đi ra từ vòng lặp

    • nếu không,

      • thêm x vào cuối res

  • trả lại res

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn

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] ]))

Đầu vào

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

Đầu ra

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