সমস্যা বিবরণ
একটি বাইনারি স্ট্রিং দেওয়া আছে যা ভলিবল ম্যাচের স্কোর প্রকাশ করে। 0 মানে টিম পয়েন্ট হারালো, 1 মানে টিম পয়েন্ট জিতলো। বিজয়ী নির্ধারণের নিয়ম:
- যে টিম প্রথমে ১৫ পয়েন্ট পাবে সে জিতবে, তবে দুটো টিমই ১৪ পয়েন্ট পেয়ে গেলে এই নিয়ম কাজ করবে না।
- যদি দুটো টিমই ১৪ পয়েন্ট পায়, তবে যে টিম ২ পয়েন্টের লিড বজায় রাখবে সে জিতবে।
ইনপুট স্ট্রিং "1001100110111001110011011" হলে আউটপুট হবে Team won।
সমাধানের ধাপসমূহ
score_cnt = [0, 0]শুরু করুন।- প্রথম লুপে প্রতিটি ক্যারেক্টার প্রসেস করুন:
pos = ord(score[i]) - ord('0')।score_cnt[pos]++।- যদি টিম ০ প্রথমে ১৫ পায় এবং টিম ১ ১৪-এর নিচে থাকে,
"Team lost"রিটার্ন করুন। - যদি টিম ১ প্রথমে ১৫ পায় এবং টিম ০ ১৪-এর নিচে থাকে,
"Team won"রিটার্ন করুন। - যদি দুটো টিমই ১৪ পায়, তবে
score_cntরিসেট করুন এবং লুপ ব্রেক করুন।
- দ্বিতীয় লুপে বাকি ক্যারেক্টার প্রসেস করুন:
- প্রতিটি পয়েন্ট যোগ করুন।
- যদি দুটো টিমের পার্থক্য ২ হয়, তবে লিডের উপর ভিত্তি করে
"Team won"বা"Team lost"রিটার্ন করুন।
পাইথন কোড উদাহরণ
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
ইনপুট
"1001010101111011101111"
আউটপুট
Team won