solve alphametic puzzles in just 9 lines of code

Yingjie Lan lanyjie at yahoo.com
Sat Sep 25 23:35:05 EDT 2010


Sorry, didn't document my code well enough.
Here is the code with an example.

Yingjie


#############Code begins###############

from itertools import permutations

def solve(puzzle):
    """solve alphametic puzzles in just 9 lines of code.
Make sure each operator is seperated from the words by
white-spaces, e.g.:

>>> solve('send + more == money')

"""
    words = [w for w in puzzle.split() if w.isalpha()]
    nonzeros = {w[0] for w in words}
    others = {a for a in ''.join(words) if a not in nonzeros}
    chars = [ord(c) for c in nonzeros]+[ord(c) for c in others]
    assert len(chars) <= 10, 'Too many letters'
    for guess in permutations('0123456789', len(chars)):
        if '0' not in guess[:len(nonzeros)]:
            equation = puzzle.translate(dict(zip(chars, guess)))
            if eval(equation): return puzzle, equation

if __name__ == '__main__':
    print ('\n'.join(solve("send + more == money")))


      



More information about the Python-list mailing list