コード例 #1
0
def product_pandigital(a,b):
    c = a * b
    digits = [int(x) for x in list(str(a)) + list(str(b)) + list(str(c))]
    digits = int(''.join(map(str, digits)))
    if is_pandigital(digits, 9):
        return True
    return False
コード例 #2
0
def solve():
    guess = 50000  # definite maximum
    while True:
        check_this = int(str(guess) + str(2 * guess))  # base case
        n = 3
        while check_this <= 987654321:
            if is_pandigital(check_this, 9):
                return check_this
            check_this = int(str(check_this) + str(n * guess))
            n += 1
        guess -= 1
コード例 #3
0
def solve():
    best_case = '987654321' # 9 digit pandigital would be ideal
    while best_case != '':
        guess_perms = sorted([int(''.join(p)) for p in permutations(best_case)], reverse = True) # find all pandigitals

        for guess in guess_perms:
            if is_pandigital(guess, len(best_case)) and is_prime(guess):
                return guess
            else:
                guess -= 1
            
        best_case = best_case[1:] # truncate if we give up on this many digits