The Minion Game

  • + 1 comment

    Instead of generating all possible substrings and storing them in a dictionary, you can take advantage of the fact that you don't need the actual substrings. You just need to count the number of substrings that start with a vowel or consonant.

    To make it efficient:

    If you consider a character at position i in the string, the number of substrings that start at i is equal to n - i, where n is the length of the string. Based on this, if the character is a vowel, Kevin will get n - i points for that character. Similarly, if it is a consonant, Stuart will get n - i points for that character. This approach avoids explicitly generating substrings and directly calculates the scores.

    def minion_game(string):
        vowels = 'AEIOU'
        str_len = len(string)
        
        kevin_score = 0
        stuart_score = 0
    
        for i in range(str_len):
            if string[i] in vowels:
                kevin_score += str_len - i
            else:
                stuart_score += str_len - i
    
        if kevin_score > stuart_score:
            print(f'Kevin {kevin_score}')
        elif stuart_score > kevin_score:
            print(f'Stuart {stuart_score}')
        else:
            print('Draw')