Python program to find score and name of winner of minion game

The Minion Game is a string-based competition between two players where they create substrings based on whether they start with vowels or consonants. Let's explore how to determine the winner and their score.

Game Rules

The game follows these rules ?

  • Both players have the same string s

  • Amal creates substrings starting with vowels (A, E, I, O, U)

  • Bimal creates substrings starting with consonants

  • Each player scores 1 point for every occurrence of their substring in the original string

  • The player with the highest total score wins

Example Breakdown

For the string "BANANA", here's how the scoring works ?

Word: BANANA
Amal (Vowels) Bimal (Consonants)
Substring Score Substring Score
A 3 B 1
AN 2 N 2
ANA 2 BA, BAN, BANA, BANAN, BANANA 5
ANAN, ANANA 2 NA, NAN, NANA 4
Total: 9 Total: 12 (Winner)

Algorithm

The key insight is that for each character at position i, all substrings starting from that position contribute (len(word) - i) points ?

def solve(word):
    vowels = set('AEIOU')
    amal_score = 0
    bimal_score = 0
    
    for i, char in enumerate(word):
        points = len(word) - i
        if char in vowels:
            amal_score += points
        else:
            bimal_score += points
    
    if amal_score > bimal_score:
        return 'Amal', amal_score
    elif bimal_score > amal_score:
        return 'Bimal', bimal_score
    else:
        return 'Draw'

# Test with example
word = "BANANA"
winner, score = solve(word)
print(f"Winner: {winner}, Score: {score}")
Winner: Bimal, Score: 12

Step-by-Step Explanation

Let's trace through "BANANA" to understand the scoring ?

def solve_with_details(word):
    vowels = set('AEIOU')
    amal_score = 0
    bimal_score = 0
    
    print(f"Analyzing word: {word}")
    print("Position | Char | Type | Points | Running Totals")
    print("-" * 50)
    
    for i, char in enumerate(word):
        points = len(word) - i
        char_type = "Vowel" if char in vowels else "Consonant"
        
        if char in vowels:
            amal_score += points
            player = "Amal"
        else:
            bimal_score += points
            player = "Bimal"
            
        print(f"{i:8} | {char:4} | {char_type:9} | {points:6} | Amal: {amal_score}, Bimal: {bimal_score}")
    
    print("-" * 50)
    if amal_score > bimal_score:
        return f"Winner: Amal with {amal_score} points"
    elif bimal_score > amal_score:
        return f"Winner: Bimal with {bimal_score} points"
    else:
        return f"Draw with {amal_score} points each"

result = solve_with_details("BANANA")
print(result)
Analyzing word: BANANA
Position | Char | Type | Points | Running Totals
--------------------------------------------------
       0 |    B | Consonant |      6 | Amal: 0, Bimal: 6
       1 |    A | Vowel     |      5 | Amal: 5, Bimal: 6
       2 |    N | Consonant |      4 | Amal: 5, Bimal: 10
       3 |    A | Vowel     |      3 | Amal: 8, Bimal: 10
       4 |    N | Consonant |      2 | Amal: 8, Bimal: 12
       5 |    A | Vowel     |      1 | Amal: 9, Bimal: 12
--------------------------------------------------
Winner: Bimal with 12 points

Testing with Different Cases

def solve(word):
    vowels = set('AEIOU')
    amal_score = 0
    bimal_score = 0
    
    for i, char in enumerate(word):
        points = len(word) - i
        if char in vowels:
            amal_score += points
        else:
            bimal_score += points
    
    if amal_score > bimal_score:
        return 'Amal', amal_score
    elif bimal_score > amal_score:
        return 'Bimal', bimal_score
    else:
        return 'Draw'

# Test cases
test_cases = ["BANANA", "APPLE", "HELLO", "AEIOU", "BCDFG"]

for word in test_cases:
    result = solve(word)
    if len(result) == 2:
        print(f"{word}: {result[0]} wins with {result[1]} points")
    else:
        print(f"{word}: {result}")
BANANA: Bimal wins with 12 points
APPLE: Amal wins with 8 points
HELLO: Bimal wins with 8 points
AEIOU: Amal wins with 15 points
BCDFG: Bimal wins with 15 points

Conclusion

The Minion Game solution uses a simple counting approach where each character contributes points equal to the number of substrings it can start. The algorithm runs in O(n) time complexity and efficiently determines the winner by tracking vowel and consonant scores.

Updated on: 2026-03-26T15:36:50+05:30

521 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements