# unscramble.py # Steve Marschner (srm2) # February 18, 2013 """Anagram solver for lecture demo.""" import string import sys # On Unix systems, including Mac OS, this file, or /usr/dict/words, usually # holds all the words in an English dictionary, one word per line. #DICT_FILE = '/usr/share/dict/words' # But I am using another word list, from Kevin Atkinson's SCOWL (Spell Checker # Oriented Word Lists) project, see wordlist.sourceforge.net. DICT_FILE = 'scowl_utf-8.txt' def prep_line(line): """Prepare a line read from the word list file by removing the trailing newline and lowercasing it.""" return line.strip().lower() def sort_string(s): """Return a copy of s with the characters sorted in alphabetical order.""" x = list(s) x.sort() return ''.join(x) dictionary = map(prep_line, open(DICT_FILE).readlines()) sorted_dict = map(sort_string, dictionary) def unscramble(anagram): """Attempts to unscramble an anagram of an English word. If contains an permutation of the letters in an English word, print the word. If not, print an error message. """ if sort_string(anagram) in sorted_dict: i = sorted_dict.index(sort_string(anagram)) print 'Your word is an anagram of "' + dictionary[i] + '"' else: print 'Your word is not an anagram of anything' if __name__ == '__main__': if len(sys.argv) == 2: unscramble(sys.argv[1]) else: print "Usage: python unscramble.py "