Search code examples
algorithmsortingduplicatesascii

Writing a function that returns true if given string has exactly 6 characters


I am trying to write a function that returns true or false if a given string has exactly 6 consecutive characters with the same value. If the string has more or less than 6, it will return false:

I am not allowed to use lists, sets or import any packages. I am only restricted to while loops, for loops, and utilizing basic mathematical operations

Two example runs are shown below:

Enter a string: 367777776  
True
Enter a string: 3677777777776  
False

Note that although I entered numbers, it is actually a string within the function argument for example: consecutive('3777776')

I tried to convert the string into an ASCII table and then try and filter out the numbers there. However, I

def consecutive(x):
    storage= ' '
    acc=0
    count=0
    for s in x:
        storage+= str(ord(s)) + ' '
        acc+=ord(s)
        if acc == acc:
            count+=1
    for s in x-1:
        
    return count

My intention is to compare the previous character's ASCII code to the current character's ASCII code in the string. If the ASCII doesnt match, I will add an accumulator for it. The accumulator will list the number of duplicates. From there, I will implement an if-else statement to see if it is greater or less than 6 However, I have a hard time translating my thoughts into python code.

Can anyone assist me?


Solution

  • That's a pretty good start!

    A few comments:

    • Variables storage and acc play the same role, and are a little more complicated than they have to be. All you want to know when you arrive at character s is whether or not s is identical to the previous character. So, you only need to store the previously seen character.
    • Condition acc == acc is always going to be True. I think you meant acc == s?
    • When you encounter an identical character, you correctly increase the count with count += 1. However, when we change characters, you should reset the count.

    With these comments in mind, I fixed your code, then blanked out a few parts for you to fill. I've also renamed storage and acc to previous_char which I think is more explicit.

    def has_6_consecutive(x):
        previous_char = None
        count = 0
        for s in x:
            if s == previous_char:
                ???
            elif count == 6:
                ???
            else:
                ???
                previous_char = ???
        ???