"""This module contains code from Think Python by Allen B. Downey http://thinkpython.com Copyright 2012 Allen B. Downey License: GNU GPLv3 http://www.gnu.org/licenses/gpl.html """ from anagram_sets import * def metathesis_pairs(d): """Print all pairs of words that differ by swapping two letters. d: map from word to list of anagrams """ for anagrams in d.itervalues(): for word1 in anagrams: for word2 in anagrams: if word1 < word2 and word_distance(word1, word2) == 2: print word1, word2 def word_distance(word1, word2): """Computes the number of differences between two words. word1, word2: strings Returns: integer """ assert len(word1) == len(word2) count = 0 for c1, c2 in zip(word1, word2): if c1 != c2: count += 1 return count if __name__ == '__main__': d = all_anagrams('words.txt') metathesis_pairs(d)