ทำนายผู้ชนะจากสตริงคะแนนแบบไบนารี
สตริงไบนารีแทนคะแนนเกมวอลเลย์บอล: 1 = ทีมเราทำคะแนนได้, 0 = ทีมเราเสียคะแนน กฎการชนะ:
- ทีมไหนทำได้ 15 คะแนนก่อน ชนะ (ยกเว้นเมื่อทั้งคู่ทำได้ 14 คะแนน)
- ถ้าทั้งคู่ทำได้ 14 คะแนน ต้องนำหน้าอีก 2 คะแนนถึงจะชนะ
อัลกอริทึม
- นับคะแนนทีมเรา (
score_cnt[1]) และคู่แข่ง (score_cnt[0]) - วนอ่านสตริง:
- ถ้าทีมเราได้ 15 คะแนน และคู่แข่ง ≤ 13 → ชนะ
- ถ้าคู่แข่งได้ 15 คะแนน และเรา ≤ 13 → แพ้
- ถ้าทั้งคู่ได้ 14 คะแนน → รีเซ็ตนับใหม่ และเข้าสู่โหมด "Deuce" (ต้องนำ 2 คะแนน)
- ในโหมด 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