Html pages no include tags and completion date.
This commit is contained in:
165
ipython/EulerProblem009.ipynb
Normal file
165
ipython/EulerProblem009.ipynb
Normal file
@@ -0,0 +1,165 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Euler Problem 9\n",
|
||||
"\n",
|
||||
"A Pythagorean triplet is a set of three natural numbers, $a < b < c$, for which,\n",
|
||||
"\n",
|
||||
"$a^2 + b^2 = c^2$\n",
|
||||
"\n",
|
||||
"For example, $3^2 + 4^2 = 9 + 16 = 25 = 5^2$.\n",
|
||||
"\n",
|
||||
"There exists exactly one Pythagorean triplet for which $a + b + c = 1000$.\n",
|
||||
"Find the product $abc$."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We start bruteforcing even though it feels like there may be a smart solution."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"66.96907186399949\n",
|
||||
"31875000\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import timeit\n",
|
||||
"\n",
|
||||
"def brute_force():\n",
|
||||
" for a in range(1, 251):\n",
|
||||
" for b in range(a + 1, 501):\n",
|
||||
" for c in range(b + 1, 1001):\n",
|
||||
" if a + b + c == 1000 and a * a + b * b == c * c:\n",
|
||||
" return a * b * c\n",
|
||||
"\n",
|
||||
"print(timeit.timeit(brute_force, number=10))\n",
|
||||
"print(brute_force())"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Let's do some optimization by cancelling the loops when we exceed the boundaries. Actually, I have also realized that choosing 251 and 501 is a little bit arbitrary. For example if a, b, c where something like $332, 333, 335$ that could be a solution and the first range was too low. Then again, we would have realized that as soon as we get back None, so it is okay."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"64.4656584559998\n",
|
||||
"31875000\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def brute_force():\n",
|
||||
" for a in range(1, 251):\n",
|
||||
" for b in range(a + 1, 501):\n",
|
||||
" if a + b > 600:\n",
|
||||
" break\n",
|
||||
" for c in range(b + 1, 1001):\n",
|
||||
" if a + b + c == 1000 and a * a + b * b == c * c:\n",
|
||||
" return a * b * c\n",
|
||||
" \n",
|
||||
"print(timeit.timeit(brute_force, number=10))\n",
|
||||
"print(brute_force())"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Big time save. Kappa. Okay, I am stupid. If I have a and b I can calculate c and check if it is a solution."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"0.22822808900036762\n",
|
||||
"31875000\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"def smart_brute_force():\n",
|
||||
" for a in range(1, 251):\n",
|
||||
" for b in range(a + 1, 501):\n",
|
||||
" c = 1000 - a - b\n",
|
||||
" if a * a + b * b == c * c:\n",
|
||||
" return a * b * c\n",
|
||||
" \n",
|
||||
"print(timeit.timeit(smart_brute_force, number=10))\n",
|
||||
"print(smart_brute_force()) "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"completion_date": "Wed, 20 Aug 2014, 17:06",
|
||||
"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": [
|
||||
"brute force",
|
||||
"pythagorean",
|
||||
"triplet"
|
||||
]
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
}
|
||||
Reference in New Issue
Block a user