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

เกมเบสบอลใน Python


สมมติว่าเรามีเครื่องบันทึกแต้มเกมเบสบอล เรามีรายการสตริง แต่ละสตริงสามารถเป็นหนึ่งใน 4 ประเภทต่อไปนี้ -

  • จำนวนเต็ม (คะแนนของรอบเดียว) − ระบุจำนวนคะแนนที่เราได้รับในรอบนี้
  • "+" (คะแนนของรอบเดียว) − ระบุว่าคะแนนที่เราได้รับในรอบนี้คือผลรวมของคะแนนสองคะแนนในรอบสุดท้ายที่ใช้ได้
  • "D" (คะแนนของรอบเดียว) − ระบุว่าคะแนนที่เราได้รับในรอบนี้เป็นข้อมูลสองเท่าของคะแนนในรอบสุดท้ายที่ใช้ได้
  • "C" (การดำเนินการซึ่งไม่ใช่คะแนนของรอบ) − ระบุว่าคะแนนของรอบสุดท้ายที่ถูกต้องที่เราได้รับนั้นไม่ถูกต้องและควรถูกลบออก

โปรดทราบว่าการดำเนินการของแต่ละรอบเป็นแบบถาวรและอาจมีผลกระทบต่อรอบก่อนและรอบหลัง เราต้องหาผลรวมของแต้มที่จะได้ในทุกรอบ

ดังนั้น หากอินพุตเป็น ["5","2","C","D","+"] เอาต์พุตจะเป็น 30 ซึ่งจริงๆ แล้วสำหรับ

  • รอบที่ 1 – เราจะได้ 5 คะแนน ผลรวมคือ:5.
  • รอบที่ 2 – เราจะได้ 2 คะแนน ผลรวมคือ:7.
  • ปฏิบัติการ 1 − ข้อมูลของรอบที่ 2 ไม่ถูกต้อง ผลรวมคือ:5.
  • รอบที่ 3 – เราจะได้ 10 แต้ม ผลรวมคือ:15.
  • รอบที่ 4 – เราจะได้ 5 + 10 =15 แต้ม ผลรวมคือ 30.

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

  • stack :=รายการว่าง
  • สำหรับแต่ละคนใน ops ทำ
    • ถ้าฉันเหมือนกับ "+" แล้ว
      • แรก :=กอง[ขนาดของกอง - 1] วินาที :=กอง[ขนาดของกอง - 2]
      • แทรก (แรก + วินาที) ลงในสแต็กในตอนท้าย
    • มิฉะนั้น เมื่อ i เหมือนกับ "D" แล้ว
      • แทรก (องค์ประกอบสุดท้ายของ stack * 2) ลงใน stack ในตอนท้าย
    • มิฉะนั้น เมื่อ i เหมือนกับ "C" แล้ว
      • ลบองค์ประกอบสุดท้ายออกจากสแต็ก
    • มิฉะนั้น
      • ใส่ i ลงใน stack ตอนท้าย
  • ส่งคืนผลรวมขององค์ประกอบทั้งหมดของสแต็ก

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

ตัวอย่าง

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","+"]))

อินพุต

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

ผลลัพธ์

30