Files
euler/ipython/EulerProblem008.ipynb

145 lines
4.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 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
}