euler/ipython/EulerProblem032.ipynb

92 lines
2.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Euler Problem 32\n",
"\n",
"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.\n",
"\n",
"The product 7254 is unusual, as the identity, 39 × 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital.\n",
"\n",
"Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.\n",
"\n",
"HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We start by thinking about how many digits are used for multiplicand/multiplier/product. Obviously, the product must have more then three digits. Can it have more then 4 digits? Obviously it can because then there are only four digits for multiplicand and multiplier which is always smaller than ten thousand. So our product must be in the form $12 \\cdot 345 = 5789$. This makes the rest very easy in Python."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"45228"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from itertools import permutations\n",
"\n",
"def is_solution(s):\n",
" a, b, c = int(s[0:2]), int(s[2:5]), int(s[5:])\n",
" if a * b == c:\n",
" return c\n",
" a, b, c = int(s[0:1]), int(s[1:5]), int(s[5:]) \n",
" if a * b == c:\n",
" return c\n",
" return 0\n",
"\n",
"assert(is_solution(\"391867254\") == 7254)\n",
"assert(is_solution(\"391867245\") == 0)\n",
"\n",
"\n",
"s = sum(set([is_solution(\"\".join(p)) for p in permutations(\"123456789\")]))\n",
"assert(s == 45228)\n",
"s"
]
}
],
"metadata": {
"completion_date": "Wed, 30 Aug 2017, 14:25",
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.4"
},
"tags": [
"pandigital",
"products"
]
},
"nbformat": 4,
"nbformat_minor": 0
}