Last change
on this file was 366, checked in by Rick van der Zwet, 13 years ago |
Draw-Something and all other sometimes needs a little help.
|
-
Property svn:executable
set to
*
|
File size:
1.3 KB
|
Rev | Line | |
---|
[366] | 1 | #!/usr/bin/env python
|
---|
| 2 | #
|
---|
| 3 | # Draw Something or any other puzzle hint script
|
---|
| 4 | #
|
---|
| 5 | # Please note that dictonaries needs to be fetched from various places.
|
---|
| 6 | #
|
---|
| 7 | # Licence: BSDLike
|
---|
| 8 | #
|
---|
| 9 | import glob
|
---|
| 10 | import re
|
---|
| 11 | import sys
|
---|
| 12 |
|
---|
| 13 | def find_words(word_length, letters):
|
---|
| 14 | # No special characters allowed
|
---|
| 15 | reg=re.compile('^[a-zA-Z]{%s}\n$' % word_length)
|
---|
| 16 |
|
---|
| 17 | # Build an list of available words
|
---|
| 18 | word_dict = {}
|
---|
| 19 | for fname in glob.glob('/home/rvdzwet/Downloads/scowl-7.1/final/english-*'):
|
---|
| 20 | with open(fname,'r') as f:
|
---|
| 21 | for word in f:
|
---|
| 22 | if reg.match(word):
|
---|
| 23 | word_dict[word.strip().lower()] = True
|
---|
| 24 |
|
---|
| 25 | word = range(word_length)
|
---|
| 26 | def choice(i, letters):
|
---|
| 27 | """ Recursively process the letters """
|
---|
| 28 | for j in range(0,len(letters)):
|
---|
| 29 | # Make sure not to process the same letter twice
|
---|
| 30 | if letters[j] in letters[0:j]:
|
---|
| 31 | continue
|
---|
| 32 | word[i] = letters[j]
|
---|
| 33 | if i == word_length - 1:
|
---|
| 34 | test_word = ''.join(word)
|
---|
| 35 | if word_dict.has_key(test_word):
|
---|
| 36 | print test_word
|
---|
| 37 | else:
|
---|
| 38 | choice(i+1, letters[:j] + letters[j+1:])
|
---|
| 39 |
|
---|
| 40 | choice(0, letters)
|
---|
| 41 |
|
---|
| 42 |
|
---|
| 43 | if __name__ == '__main__':
|
---|
| 44 | try:
|
---|
| 45 | word_length = int(sys.argv[1])
|
---|
| 46 | letters = tuple(sys.argv[2])
|
---|
| 47 | find_words(word_length, letters)
|
---|
| 48 | except IndexError:
|
---|
| 49 | print "Usage: %s <length> <letters>"
|
---|
| 50 | sys.exit(128)
|
---|
| 51 |
|
---|
Note:
See
TracBrowser
for help on using the repository browser.