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

ค้นหาผู้ชนะของเกมที่ให้คะแนนเป็นสตริงไบนารีใน Python


สมมุติว่าเรามีเลขฐานสองที่แทนคะแนนของการแข่งขันวอลเลย์บอล เราต้องหาผู้ชนะการแข่งขันตามเงื่อนไขต่อไปนี้ –

  • มีสองทีมที่เล่นกันเอง และทีมที่ทำคะแนนได้ 15 คะแนนก่อนจะเป็นผู้ชนะ ยกเว้นเมื่อทั้งสองทีมมีคะแนนถึง 14 คะแนน

  • เมื่อทั้งสองทีมมีคะแนนถึง 14 แต้มในขณะนั้น ทีมที่นำสองแต้มจะเป็นผู้ชนะ

จากสตริงไบนารีที่กำหนด 0 หมายถึงทีมเสียคะแนนและ 1 หมายถึงทีมชนะคะแนน เราต้องเช็คก่อนว่าทีมชนะหรือแพ้นัดนี้

ดังนั้น หากอินพุตเป็น like score ="1001100110111001110011011" ผลลัพธ์จะเป็นทีมที่ชนะ

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

  • score_cnt :=[0,0]

  • สำหรับผมอยู่ในช่วง 0 ถึงขนาดของคะแนน ทำ

    • pos :=ASCII ของ (score[i]) - ASCII ของ ('0')

    • score_cnt[pos] :=score_cnt[pos] + 1

    • ถ้า score_cnt[0] เหมือนกับ n และ score_cnt[1] − n - 1 แล้ว

      • กลับ "ทีมแพ้"

    • ถ้า score_cnt[1] เหมือนกับ n และ score_cnt[0]

      • ส่งคืน "ทีมชนะ"

    • ถ้า score_cnt[0] เหมือนกับ n - 1 และ score_cnt[1] เหมือนกับ n - 1 แล้ว

      • score_cnt[0] :=0

      • score_cnt[1] :=0

      • ออกจากวง

  • ผม :=ผม + 1

  • เพราะฉันอยู่ในช่วง i ถึงขนาดของคะแนน ทำ

    • pos :=ASCII ของ (score[i]) - ASCII ของ ('0')

    • score_cnt[pos] :=score_cnt[pos] + 1

    • ถ้า |score_cnt[0] - score_cnt[1]| เท่ากับ 2 แล้ว

      • ถ้า score_cnt[0]> score_cnt[1] แล้ว

        • กลับ "ทีมแพ้"

      • มิฉะนั้น

        • ส่งคืน "ทีมชนะ"

ตัวอย่าง

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

def predictWinner(score, n):
score_cnt = [0,0]
   for i in range(len(score)):
      pos = ord(score[i]) - ord('0')
      score_cnt[pos] += 1
      if (score_cnt[0] == n and score_cnt[1] < n - 1):
         return "Team lost"
      if (score_cnt[1] == n and score_cnt[0] < n - 1):
         return "Team won"
      if (score_cnt[0] == n - 1 and
         score_cnt[1] == n - 1):
         score_cnt[0] = 0
         score_cnt[1] = 0
         break
   i += 1
   for i in range(i, len(score)):
      pos = ord(score[i]) - ord('0')
      score_cnt[pos] += 1
      if (abs(score_cnt[0] - score_cnt[1]) == 2):
         if (score_cnt[0] > score_cnt[1]):
            return "Team lost"
         else:
            return "Team won"
score = "1001010101111011101111"
n = 15
print(predictWinner(score, n))

อินพุต

"1001010101111011101111"

ผลลัพธ์

Team won