import re
import itertools
def solve(puzzle):
words = re.findall('[A-Z]+', puzzle.upper())
unique_characters = set(''.join(words))
assert len(unique_characters) <= 10, 'Too many letters'
first_letters = {word[0] for word in words} #取出每个数字的首字母,放在集合里
n = len(first_letters) #获取首字母的个数,后面判断首字母是否为0要用到
sorted_characters =''.join(first_letters)+''.join(unique_characters - first_letters)
#重新组合,首字母全部在前面
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)):
#以len(characters)个数字为一组对10个数字进行组合
if zero not in guess[:n]:#如果首字母里没有0
equation =puzzle.translate(dict(zip(characters, guess)))
if eval(equation.replace('=','==')):
return equation
if solve('SEND + MORE = MONEY'):
print(solve('SEND + MORE = MONEY'))
字母组合算数猜谜
最新推荐文章于 2020-04-07 09:04:08 发布