2019-10-03 20:47:39 +00:00
|
|
|
"""
|
|
|
|
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.
|
|
|
|
|
2024-04-22 19:51:47 +00:00
|
|
|
The product 7254 is unusual, as the identity, 39 x 186 = 7254, containing
|
2019-10-03 20:47:39 +00:00
|
|
|
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.
|
|
|
|
"""
|
2024-03-13 06:52:41 +00:00
|
|
|
|
2019-10-03 20:47:39 +00:00
|
|
|
import itertools
|
|
|
|
|
|
|
|
|
2022-10-12 22:54:20 +00:00
|
|
|
def is_combination_valid(combination):
|
2019-10-03 20:47:39 +00:00
|
|
|
"""
|
|
|
|
Checks if a combination (a tuple of 9 digits)
|
|
|
|
is a valid product equation.
|
|
|
|
|
2022-10-12 22:54:20 +00:00
|
|
|
>>> is_combination_valid(('3', '9', '1', '8', '6', '7', '2', '5', '4'))
|
2019-10-03 20:47:39 +00:00
|
|
|
True
|
|
|
|
|
2022-10-12 22:54:20 +00:00
|
|
|
>>> is_combination_valid(('1', '2', '3', '4', '5', '6', '7', '8', '9'))
|
2019-10-03 20:47:39 +00:00
|
|
|
False
|
|
|
|
|
|
|
|
"""
|
|
|
|
return (
|
2019-10-05 05:14:13 +00:00
|
|
|
int("".join(combination[0:2])) * int("".join(combination[2:5]))
|
|
|
|
== int("".join(combination[5:9]))
|
2019-10-03 20:47:39 +00:00
|
|
|
) or (
|
2019-10-05 05:14:13 +00:00
|
|
|
int("".join(combination[0])) * int("".join(combination[1:5]))
|
|
|
|
== int("".join(combination[5:9]))
|
2019-10-03 20:47:39 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
def solution():
|
|
|
|
"""
|
|
|
|
Finds the sum of all products whose multiplicand/multiplier/product identity
|
|
|
|
can be written as a 1 through 9 pandigital
|
|
|
|
|
|
|
|
>>> solution()
|
|
|
|
45228
|
|
|
|
"""
|
|
|
|
|
|
|
|
return sum(
|
2020-01-03 14:25:36 +00:00
|
|
|
{
|
|
|
|
int("".join(pandigital[5:9]))
|
|
|
|
for pandigital in itertools.permutations("123456789")
|
2022-10-12 22:54:20 +00:00
|
|
|
if is_combination_valid(pandigital)
|
2020-01-03 14:25:36 +00:00
|
|
|
}
|
2019-10-03 20:47:39 +00:00
|
|
|
)
|
|
|
|
|
2019-10-05 05:14:13 +00:00
|
|
|
|
2019-10-03 20:47:39 +00:00
|
|
|
if __name__ == "__main__":
|
|
|
|
print(solution())
|