Mercurial > hg > config
comparison python/anagram.py @ 0:f3ab51c79813
adding configuration from https://svn.openplans.org/svn/config_jhammel/
author | k0s <k0scist@gmail.com> |
---|---|
date | Thu, 15 Oct 2009 11:41:26 -0400 |
parents | |
children | 099a3bfa2852 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f3ab51c79813 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 import os | |
4 | |
5 dictionary = [] | |
6 | |
7 def read_dictionary(f): | |
8 for name in f.readlines(): | |
9 name = name.strip('\n') | |
10 word = ''.join(name.split()).lower() | |
11 dictionary.append(word) | |
12 | |
13 def is_in(string1, string2): | |
14 | |
15 string2 = list(string2) | |
16 | |
17 try: | |
18 for i in string1: | |
19 string2.remove(i) | |
20 except ValueError: | |
21 return None | |
22 | |
23 return ''.join(string2) | |
24 | |
25 def anagramize(theword, wordlist, level=0): | |
26 | |
27 if 0: | |
28 print '%s%s : %s' % ('-' * level, theword, wordlist) | |
29 | |
30 anagrams = [] | |
31 | |
32 # start the search with a new word | |
33 for index in range(len(wordlist)): | |
34 word = wordlist[index] | |
35 subword = is_in(word, theword) | |
36 if subword == '': | |
37 anagrams.append(word) | |
38 continue | |
39 | |
40 if subword is None: | |
41 continue | |
42 | |
43 | |
44 sublist = [ i for i in wordlist[index:] | |
45 if is_in(i, subword) is not None ] | |
46 subgram = anagramize(subword, sublist, level+1) | |
47 | |
48 # import pdb; pdb.set_trace() | |
49 if subgram is not None: | |
50 anagrams += [ ' '.join((word, i)) for i in subgram ] | |
51 | |
52 if 0: | |
53 print '%s%s returning %s' % ('-' * level, theword, anagrams) | |
54 | |
55 if anagrams: | |
56 return anagrams | |
57 return None | |
58 | |
59 if __name__ == '__main__': | |
60 import sys | |
61 from optparse import OptionParser | |
62 | |
63 parser = OptionParser() | |
64 parser.add_option("-f", dest="filename", help="dictionary to read", | |
65 default='') | |
66 (options, args) = parser.parse_args() | |
67 | |
68 if not os.path.exists(options.filename): | |
69 | |
70 dicts = [ '/home/jhammel/docs/dict.txt', | |
71 '/usr/share/dict/cracklib-small', | |
72 '/usr/share/dict/american-english' ] | |
73 | |
74 for i in dicts: | |
75 if os.path.exists(i): | |
76 options.filename = i | |
77 break | |
78 else: | |
79 print 'Dictionary not found' | |
80 parser.print_help() | |
81 sys.exit(1) | |
82 | |
83 if not args: | |
84 print 'please provide an anagram' | |
85 sys.exit(0) | |
86 | |
87 f = file(options.filename, 'r') | |
88 read_dictionary(f) | |
89 | |
90 anagram = ' '.join(args) | |
91 | |
92 print anagram | |
93 print '-' * len(anagram) | |
94 | |
95 anagram = ''.join(anagram.split()).lower() | |
96 | |
97 # don't use letter names | |
98 dictionary = [ i for i in dictionary if (len(i) > 1) or i in 'ai' ] | |
99 | |
100 wordlist = [ i for i in dictionary | |
101 if i and is_in(i, anagram) is not None ] | |
102 | |
103 anagrams = anagramize(anagram, wordlist) | |
104 | |
105 print '\n'.join(anagrams) |