Public » Letterpress
Clone URL:  
Pushed to one repository · View In Graph Contained in tip

initial

Changeset b1be9d887ae9

by Benjamin Pollack

Changes to 3 files · Browse files at b1be9d887ae9 Diff from another changeset...

Change 1 of 1 Show Entire File cleaner.py Stacked
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
@@ -0,0 +1,12 @@
+import re + + +def clean(infile, outfile): + r = re.compile('^[a-z]+$') + with open(infile, 'r') as i, open(outfile, 'w') as o: + for line in i: + if r.match(line): + o.write(line) + +if __name__ == '__main__': + clean('wordlist.txt', 'out.txt')
Change 1 of 1 Show Entire File solver.py Stacked
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
@@ -0,0 +1,59 @@
+import sys + + +class Trie(object): + def __init__(self): + self._letters = {} + self._terminal = False + + def add(self, word): + node = self + for c in word: + if c not in node._letters: + node._letters[c] = Trie() + node = node._letters[c] + node._terminal = True + + def is_terminal(self): + return self._terminal + + def has_prefix(self, s): + node = self + for c in s: + if c not in node._letters: + return False + node = node._letters[c] + return True + + def subtrie(self, c): + return self._letters[c] + + def __contains__(self, s): + if not s: + return self.is_terminal() + else: + return s[0] in self._letters and s[1:] in self._letters[s[0]] + + +def solve(board, forbidden): + def find_words(board, word, trie): + words = set() + if trie.is_terminal(): + words.add(word) + for i in xrange(len(board)): + if trie.has_prefix(board[i]): + words.update(find_words(board[:i] + board[i + 1:], word + board[i], trie)) + return words + + t = Trie() + for l in open('wordlist', 'r'): + word = l.strip() + if word not in forbidden: + t.add(word) + + return 'BEST WORDS' + for word in sorted(find_words(board, '', t), key=lambda x: len(x), reverse=True)[:10]: + print ' %s' % word + +if __name__ == '__main__': + solve(sys.argv[1], sys.argv[2:])
Show Entire File wordlist Stacked
This file's diff was not loaded because this changeset is very large. Load changes