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

หาผู้ชนะเกมวอลเลย์บอลจากสตริงไบนารีใน Python

ทำนายผู้ชนะจากสตริงคะแนนแบบไบนารี

สตริงไบนารีแทนคะแนนเกมวอลเลย์บอล: 1 = ทีมเราทำคะแนนได้, 0 = ทีมเราเสียคะแนน กฎการชนะ:

  1. ทีมไหนทำได้ 15 คะแนนก่อน ชนะ (ยกเว้นเมื่อทั้งคู่ทำได้ 14 คะแนน)
  2. ถ้าทั้งคู่ทำได้ 14 คะแนน ต้องนำหน้าอีก 2 คะแนนถึงจะชนะ

อัลกอริทึม

  1. นับคะแนนทีมเรา (score_cnt[1]) และคู่แข่ง (score_cnt[0])
  2. วนอ่านสตริง:
    • ถ้าทีมเราได้ 15 คะแนน และคู่แข่ง ≤ 13 → ชนะ
    • ถ้าคู่แข่งได้ 15 คะแนน และเรา ≤ 13 → แพ้
    • ถ้าทั้งคู่ได้ 14 คะแนน → รีเซ็ตนับใหม่ และเข้าสู่โหมด "Deuce" (ต้องนำ 2 คะแนน)
  3. ในโหมด Deuce: วนต่อจนกว่า |score_cnt[0] - score_cnt[1]| == 2 แล้วตัดสินผู้ชนะ

โค้ดตัวอย่าง Python

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))  # Team won