145 lines
4.6 KiB
Plaintext
145 lines
4.6 KiB
Plaintext
|
{
|
|||
|
"cells": [
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"# Euler Problem 8\n",
|
|||
|
"\n",
|
|||
|
"The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.\n",
|
|||
|
"\n",
|
|||
|
"~~~\n",
|
|||
|
"73167176531330624919225119674426574742355349194934\n",
|
|||
|
"96983520312774506326239578318016984801869478851843\n",
|
|||
|
"85861560789112949495459501737958331952853208805511\n",
|
|||
|
"12540698747158523863050715693290963295227443043557\n",
|
|||
|
"66896648950445244523161731856403098711121722383113\n",
|
|||
|
"62229893423380308135336276614282806444486645238749\n",
|
|||
|
"30358907296290491560440772390713810515859307960866\n",
|
|||
|
"70172427121883998797908792274921901699720888093776\n",
|
|||
|
"65727333001053367881220235421809751254540594752243\n",
|
|||
|
"52584907711670556013604839586446706324415722155397\n",
|
|||
|
"53697817977846174064955149290862569321978468622482\n",
|
|||
|
"83972241375657056057490261407972968652414535100474\n",
|
|||
|
"82166370484403199890008895243450658541227588666881\n",
|
|||
|
"16427171479924442928230863465674813919123162824586\n",
|
|||
|
"17866458359124566529476545682848912883142607690042\n",
|
|||
|
"24219022671055626321111109370544217506941658960408\n",
|
|||
|
"07198403850962455444362981230987879927244284909188\n",
|
|||
|
"84580156166097919133875499200524063689912560717606\n",
|
|||
|
"05886116467109405077541002256983155200055935729725\n",
|
|||
|
"71636269561882670428252483600823257530420752963450\n",
|
|||
|
"~~~\n",
|
|||
|
"\n",
|
|||
|
"Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
"We need the number as a list of integers first."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 1,
|
|||
|
"metadata": {
|
|||
|
"collapsed": false
|
|||
|
},
|
|||
|
"outputs": [],
|
|||
|
"source": [
|
|||
|
"def remove_newlines(s):\n",
|
|||
|
" import re\n",
|
|||
|
" return re.sub(r'\\n', '', s)\n",
|
|||
|
"\n",
|
|||
|
"digits_string = \"\"\"73167176531330624919225119674426574742355349194934\n",
|
|||
|
"96983520312774506326239578318016984801869478851843\n",
|
|||
|
"85861560789112949495459501737958331952853208805511\n",
|
|||
|
"12540698747158523863050715693290963295227443043557\n",
|
|||
|
"66896648950445244523161731856403098711121722383113\n",
|
|||
|
"62229893423380308135336276614282806444486645238749\n",
|
|||
|
"30358907296290491560440772390713810515859307960866\n",
|
|||
|
"70172427121883998797908792274921901699720888093776\n",
|
|||
|
"65727333001053367881220235421809751254540594752243\n",
|
|||
|
"52584907711670556013604839586446706324415722155397\n",
|
|||
|
"53697817977846174064955149290862569321978468622482\n",
|
|||
|
"83972241375657056057490261407972968652414535100474\n",
|
|||
|
"82166370484403199890008895243450658541227588666881\n",
|
|||
|
"16427171479924442928230863465674813919123162824586\n",
|
|||
|
"17866458359124566529476545682848912883142607690042\n",
|
|||
|
"24219022671055626321111109370544217506941658960408\n",
|
|||
|
"07198403850962455444362981230987879927244284909188\n",
|
|||
|
"84580156166097919133875499200524063689912560717606\n",
|
|||
|
"05886116467109405077541002256983155200055935729725\n",
|
|||
|
"71636269561882670428252483600823257530420752963450\"\"\"\n",
|
|||
|
"\n",
|
|||
|
"digits = [int(d) for d in remove_newlines(digits_string)]"
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "markdown",
|
|||
|
"metadata": {},
|
|||
|
"source": [
|
|||
|
" Then we can use slicing to do a brute force."
|
|||
|
]
|
|||
|
},
|
|||
|
{
|
|||
|
"cell_type": "code",
|
|||
|
"execution_count": 2,
|
|||
|
"metadata": {
|
|||
|
"collapsed": false
|
|||
|
},
|
|||
|
"outputs": [
|
|||
|
{
|
|||
|
"name": "stdout",
|
|||
|
"output_type": "stream",
|
|||
|
"text": [
|
|||
|
"23514624000\n"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"source": [
|
|||
|
"def product(xs):\n",
|
|||
|
" from operator import mul\n",
|
|||
|
" from functools import reduce\n",
|
|||
|
" return reduce(mul, xs, 1)\n",
|
|||
|
"\n",
|
|||
|
"def get_largest_product_of_n_digits(digits, n):\n",
|
|||
|
" return max((product(digits[i:i + n]) for i in range(len(digits))))\n",
|
|||
|
"\n",
|
|||
|
"assert(get_largest_product_of_n_digits(digits, 4) == 5832)\n",
|
|||
|
"assert(get_largest_product_of_n_digits(digits, 13) == 23514624000)\n",
|
|||
|
"print(get_largest_product_of_n_digits(digits, 13))"
|
|||
|
]
|
|||
|
}
|
|||
|
],
|
|||
|
"metadata": {
|
|||
|
"completion_date": "Wed, 20 Aug 2014, 16:03",
|
|||
|
"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": [
|
|||
|
"product",
|
|||
|
"reduce",
|
|||
|
"slice"
|
|||
|
]
|
|||
|
},
|
|||
|
"nbformat": 4,
|
|||
|
"nbformat_minor": 0
|
|||
|
}
|