Problem 31

Pandigital products

Problem 33

Pandigital products

Problem 32

We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through 5 pandigital.
The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital.
Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.
HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum.
from tools import is_pandigital


def gen():
    for a in range(2, 100):
        if a < 10:
            start = 1000
        else:
            start = 100

        end = 10000 / a
        if a * end == 10000:
            end -= 1

        for b in range(start, end + 1):
            p = a * b
            yield a, b, p


def run():
    s = set(p for (a, b, p) in gen() if is_pandigital('%d%d%d' % (a, b, p)))
    return sum(s)