I implemented the Anagrams Within Words programming puzzle from Programming Praxis in Python, a language I haven’t used since my college days when I used it to implement a REST service as part of my final year project.
Needless to say, I had forgotten most of the syntax and had to repeatedly refer to the Python docs.
Given two words, determine if the first word, or any anagram of it, appears in consecutive characters of the second word. For instance, cat appears as an anagram in the first three letters of actor, but car does not appear as an anagram in actor even though all the letters of car appear in actor.
class AnagramChecker: #Temporary list that contains the first word. We will remove matching #characters from here #Python doesn't insist on explicit declaration of class variables but #this variable was declared for purposes of clarity tempFirstWord =  def checkChar(self, charOfSecondWord): if charOfSecondWord in self.tempFirstWord: #Remove matching character from temporary first word self.tempFirstWord.remove(charOfSecondWord) else: #Reset first word as we need to start checking from beginning self.tempFirstWord = list(self.firstWord) #If our tracking variable runs down to 0 then we have a complete and continuous match if len(self.tempFirstWord) == 0: return True else: return False def checkAnagram(self, userInput): #Python's wonderful list unpacking feature means we don't need a temporary #variable to store the split results self.firstWord, self.secondWord = userInput.split(" ") self.tempFirstWord = list(self.firstWord) anagramFound = False for c in self.secondWord: if self.checkChar(c): anagramFound = True break return anagramFound userInput = raw_input("Please enter two words: ") checkerObj = AnagramChecker() print "Anagram found: ", checkerObj.checkAnagram(userInput)
Also here on GitHub Gists.
Please enter two words: act tractor
Anagram found: True
Please enter two words: car actor
Anagram found: False