Changeset b1be9d887ae9…
by
Changes to 3 files · Browse files at b1be9d887ae9 Diff from another changeset...
|
@@ -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')
|
|
@@ -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:])
|
This file's diff was not loaded because this changeset is very large. Load changes Loading... |
Loading...