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

Trò chơi bóng chày bằng Python

Giả sử chúng ta có một máy ghi điểm trận đấu bóng chày. Chúng tôi có một danh sách các chuỗi; mỗi chuỗi có thể là một trong 4 kiểu sau -

  • Số nguyên (điểm của một vòng) - Cho biết số điểm chúng tôi nhận được trong vòng này.
  • "+" (điểm của một hiệp) - Cho biết số điểm chúng tôi nhận được trong vòng này là tổng của hai điểm hợp lệ của vòng cuối cùng.
  • "D" (điểm của một hiệp) - Cho biết số điểm chúng tôi nhận được trong vòng này là dữ liệu nhân đôi của số điểm hợp lệ của vòng cuối cùng.
  • "C" (một phép toán, không phải là điểm của vòng) - Cho biết điểm hợp lệ cuối cùng của vòng mà chúng tôi nhận được là không hợp lệ và cần bị loại bỏ.

Lưu ý rằng hoạt động của mỗi vòng là vĩnh viễn và có thể ảnh hưởng đến vòng trước và vòng sau. Chúng tôi phải tìm tổng số điểm mà chúng tôi có thể nhận được trong tất cả các vòng.

Vì vậy, nếu đầu vào là ["5", "2", "C", "D", "+"], thì đầu ra sẽ là 30. Điều này thực sự dành cho

  • Vòng 1 - Chúng tôi có thể nhận được 5 điểm. Tổng là:5.
  • Vòng 2 - Chúng tôi có thể giành được 2 điểm. Tổng là:7.
  • Thao tác 1 - Dữ liệu của vòng 2 không hợp lệ. Tổng là:5.
  • Vòng 3 - Chúng tôi có thể nhận được 10 điểm. Tổng là:15.
  • Vòng 4 - Chúng tôi có thể nhận được 5 + 10 =15 điểm. Tổng là:30.

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

  • ngăn xếp:=danh sách trống
  • đối với mỗi tôi trong hoạt động, hãy thực hiện
    • nếu tôi giống với "+", thì
      • đầu tiên:=ngăn xếp [kích thước của ngăn xếp - 1], thứ hai:=ngăn xếp [kích thước của ngăn xếp - 2]
      • chèn (thứ nhất + thứ hai) vào ngăn xếp ở cuối
    • ngược lại, khi tôi giống với "D", thì
      • chèn (phần tử cuối cùng của ngăn xếp * 2) vào cuối ngăn xếp
    • ngược lại, khi tôi giống với "C", thì
      • xóa phần tử cuối cùng khỏi ngăn xếp
    • nếu không,
      • chèn tôi vào ngăn xếp ở cuối
  • trả về tổng của tất cả các phần tử của ngăn xếp

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

Ví dụ

class Solution:
   def calPoints(self, ops):
      stack = []
      for i in ops:
         if i == "+":
            first, second = stack[len(stack) - 1],
            stack[len(stack) - 2]
            stack.append(first + second)
         elif i == "D":
            stack.append(stack[-1] * 2)
         elif i == "C":
            stack.pop()
         else:
            stack.append(int(i))
      return sum(stack)
ob = Solution()
print(ob.calPoints(["5","2","C","D","+"]))

Đầu vào

["5","2","C","D","+"]

Đầu ra

30