#!/usr/bin/env python """ Created on 03 Aug 2021 @author: David Doblas Jiménez @email: daviddoji@pm.me Solution for problem 043 of Project Euler https://projecteuler.net/problem=43 """ from itertools import permutations from project_euler_python.utils import timeit @timeit("Problem 043") def compute(): """ The number, 1406357289, is a 0 to 9 pandigital number because it is made up of each of the digits 0 to 9 in some order, but it also has a rather interesting sub-string divisibility property. Let d1 be the 1st digit, d2 be the 2nd digit, and so on. In this way, we note the following: d2d3d4=406 is divisible by 2 d3d4d5=063 is divisible by 3 d4d5d6=635 is divisible by 5 d5d6d7=357 is divisible by 7 d6d7d8=572 is divisible by 11 d7d8d9=728 is divisible by 13 d8d9d10=289 is divisible by 17 Find the sum of all 0 to 9 pandigital numbers with this property. """ ans = [] pandigital = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] for n in permutations(pandigital): n_ = "".join(n) if n_[0] != "0" and sorted("".join(n_)) == pandigital: if int(n_[7:]) % 17 == 0: if int(n_[6:9]) % 13 == 0: if int(n_[5:8]) % 11 == 0: if int(n_[4:7]) % 7 == 0: if int(n_[3:6]) % 5 == 0: if int(n_[2:5]) % 3 == 0: if int(n_[1:4]) % 2 == 0: ans.append(int(n_)) return sum(ans) if __name__ == "__main__": print(f"Result for Problem 043: {compute()}")