Skip to content

Instantly share code, notes, and snippets.

@thebenedict
Last active December 29, 2015 10:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thebenedict/7655053 to your computer and use it in GitHub Desktop.
Save thebenedict/7655053 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
import sys
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument("input_file", help="Word list as .txt, one word per line")
args = parser.parse_args()
try:
input_file = open(args.input_file, "r")
except:
print "Sorry partner, %s is not a valid word list." % args.input_file
sys.exit()
anagrams = find_anagrams(input_file)
set_count = 0
set_lengths = {}
for key in anagrams:
set_length = len(anagrams[key])
if set_length > 1:
set_count += 1
if set_length in set_lengths:
set_lengths[set_length] += 1
else:
set_lengths[set_length] = 1
print(", ".join(anagrams[key]))
print "---\nsets of anagrams: %s\n---" % set_count
print "set length\tcount"
for length in set_lengths:
print "%s\t\t%s" % (length, set_lengths[length])
def find_anagrams(infile):
anagrams = {}
for line in infile:
word = line.strip("\n")
charlist = list(word)
charlist.sort()
key = "".join(charlist)
if key in anagrams:
anagrams[key].append(word)
else:
anagrams[key] = [word]
infile.close()
return anagrams
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment