{ "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 }