filled in some code examples in advanced iterators chapter

This commit is contained in:
Mark Pilgrim
2009-03-30 09:40:46 -05:00
parent 30574286e9
commit dbcf5c541c
2 changed files with 288 additions and 8 deletions
+7 -5
View File
@@ -8,18 +8,20 @@ import re
import itertools
def solve(puzzle):
words = re.findall('[A-Z]+', puzzle)
unique_characters = set(''.join(words))
words = re.findall('[A-Z]+', puzzle.upper())
unique_characters = {c for c in ''.join(words)}
assert len(unique_characters) <= 10
first_letters = set(word[0] for word in words)
first_letters = {word[0] for word in words}
n = len(first_letters)
sorted_characters = ''.join(first_letters) + \
''.join(unique_characters - first_letters)
characters = tuple(map(ord, sorted_characters))
digits = tuple(map(ord, '0123456789'))
characters = tuple(ord(c) for c in sorted_characters)
digits = tuple(ord(c) for c in '0123456789')
zero = digits[0]
for guess in itertools.permutations(digits, len(characters)):
if zero not in guess[:n]:
print(guess)
return
equation = puzzle.translate(dict(zip(characters, guess)))
if eval(equation):
return equation