Almost every Classmate notebook has a page at the end with some interesting facts on it. In my notebook, one of the facts went like this:
Skepticism is the longest word that can be typed with alternate hands.
A list of all valid English words is available in Linux systems. You can get them too, /usr/share/dict/words. So I decided to check the fact and retrieve the largest word that can be typed with alternate hands.
I wrote a Python script to do it.
I wrote a Python script to do it.
Flip = lambda X: 0 if X == 1 else 1 
Alibaba = lambda X: 0 if X in left_hand else 1
babloo = str()                # Required string    
babloo_len = 0        
left_hand = 'ASDFGQWERTZXCV'  # Alphabets assigned to Left hand
right_hand = 'LKJHPOIUYMNB'   # Alphabets assigned to Right hand
filename = 'words.txt'        # File with all valid words, 
                              # one on each line  
if __name__ == '__main__':    
    my_file = open(filename, 'r') 
    
    for line in my_file:
        word = line.rstrip().upper()
    
        Clock = Alibaba(word[0])
        sync = True
        for alphabet in word:
            if Alibaba(alphabet) != Clock:  
                sync = False                
                break
            Clock = Flip(Clock)
        if sync:
            print(word, end=',')
            if len(word) > babloo_len:
                babloo = word
                babloo_len = len(word)
    my_file.close()
    print("\n")
    print("Largest word is %s with a length of %d alphabets" 
           % (babloo, babloo_len))
# No offence meant, Babloo
This extracts all the required words and displays the largest of them. They came out to
be AUTHENTICITY and ABSORPTIVITY, which have a character length of 12. There are others with a character length of 11. These include DISBANDMENT, ENCHANTMENT, ENTITLEMENT, PROFICIENCY and SHANTYTOWNS. You can modify the script to extract them too.
EDIT: A code golf solution
Written keeping in mind to traverse a word just once.
FILENAME = 'words.txt'
required_words = []
for w in map(lambda s: s.upper(), open(FILENAME, 'r').read().splitlines()):
    prev = None
    for now in map(lambda l: 1 if l in 'ASDFGQWERTZXCV' else 0, w):
        if now == prev: break
        prev = now
    else:
        required_words.append(w)
print(max(required_words, key=len))
No comments:
Post a Comment
Comment!
Note: only a member of this blog may post a comment.