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

Tìm người chiến thắng trong trò chơi mà điểm được đưa ra dưới dạng chuỗi nhị phân bằng Python


Giả sử chúng ta có một chuỗi nhị phân biểu thị điểm số của một trận đấu bóng chuyền, chúng ta phải tìm ra người chiến thắng của trận đấu dựa trên các điều kiện sau -

  • Có hai đội chơi với nhau và đội nào ghi được 15 điểm trước sẽ là đội chiến thắng trừ khi cả hai đội đã đạt đến 14 điểm.

  • Khi cả hai đội cùng đạt được 14 điểm lúc đó đội nào đang dẫn trước hai điểm sẽ là đội chiến thắng.

Từ chuỗi nhị phân đã cho, số 0 đại diện cho đội thua một điểm và 1 cho biết đội giành được một điểm. Chúng tôi phải kiểm tra xem đội đã thắng hay thua trong trận đấu.

Vì vậy, nếu đầu vào giống như score ="1001100110111001110011011", thì đầu ra sẽ là Đội chiến thắng

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

  • score_cnt:=[0,0]

  • đối với tôi trong phạm vi từ 0 đến cỡ điểm, hãy làm

    • pos:=ASCII of (score [i]) - ASCII of ('0')

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

    • nếu score_cnt [0] giống với n và score_cnt [1] - n - 1 thì

      • trả về "Đội đã mất"

    • nếu score_cnt [1] giống n và score_cnt [0]

      • trả về "Đội đã thắng"

    • nếu score_cnt [0] giống n - 1 và score_cnt [1] giống n - 1 thì

      • score_cnt [0]:=0

      • score_cnt [1]:=0

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

  • i:=i + 1

  • đối với tôi trong phạm vi i đến cỡ điểm, hãy làm

    • pos:=ASCII of (score [i]) - ASCII of ('0')

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

    • if | score_cnt [0] - score_cnt [1] | giống như 2, sau đó

      • nếu score_cnt [0]> score_cnt [1] thì

        • trả về "Đội đã mất"

      • nếu không,

        • trả về "Đội đã thắng"

Ví dụ

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

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

Đầu vào

"1001010101111011101111"

Đầu ra

Team won