मान लीजिए हमारे पास एक बाइनरी स्ट्रिंग है जो वॉलीबॉल मैच के स्कोर को दर्शाती है। हमें निम्न शर्तों के आधार पर मैच का विजेता ढूंढना है:
- दो टीमें एक-दूसरे के साथ खेलती हैं और जो टीम पहले 15 अंक बनाती है वह विजेता होती है, सिवाय इसके कि जब दोनों टीमें 14 अंक तक पहुंच गई हों।
- जब दोनों टीमें 14 अंक तक पहुंच जाती हैं, तो वह टीम विजेता होती है जो दो अंकों की बढ़त बनाए रखती है।
दी गई बाइनरी स्ट्रिंग में, 0 टीम के अंक हारने को दर्शाता है और 1 टीम के अंक जीतने को दर्शाता है। हमें जांचना है कि टीम जीती या हारी।
इसलिए, यदि इनपुट score = "1001100110111001110011011" है, तो आउटपुट Team won होगा।
समाधान दृष्टिकोण
इसे हल करने के लिए हम निम्न चरणों का पालन करेंगे:
score_cnt := [0, 0]iको 0 सेlen(score)-1तक के लिए:pos := ord(score[i]) - ord('0')score_cnt[pos] += 1- यदि
score_cnt[0] == nऔरscore_cnt[1] < n - 1, तो "Team lost" लौटाएं। - यदि
score_cnt[1] == nऔरscore_cnt[0] < n - 1, तो "Team won" लौटाएं। - यदि
score_cnt[0] == n - 1औरscore_cnt[1] == n - 1:score_cnt[0] := 0,score_cnt[1] := 0- लूप से बाहर निकलें।
i := i + 1iसेlen(score)-1तक के लिए:pos := ord(score[i]) - ord('0')score_cnt[pos] += 1- यदि
|score_cnt[0] - score_cnt[1]| == 2:- यदि
score_cnt[0] > score_cnt[1], तो "Team lost" लौटाएं। - अन्यथा, "Team won" लौटाएं।
- यदि
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
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