Files
euler-project/problems/008_problem/008_problem.py
2020-08-02 07:38:10 -04:00

66 lines
3.3 KiB
Python
Executable File
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.
# # Problem 8:
#
# [Euler Project #8](https://projecteuler.net/problem=8)
#
#
#
# > The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.
#
# > 73167176531330624919225119674426574742355349194934
# 96983520312774506326239578318016984801869478851843
# 85861560789112949495459501737958331952853208805511
# 12540698747158523863050715693290963295227443043557
# 66896648950445244523161731856403098711121722383113
# 62229893423380308135336276614282806444486645238749
# 30358907296290491560440772390713810515859307960866
# 70172427121883998797908792274921901699720888093776
# 65727333001053367881220235421809751254540594752243
# 52584907711670556013604839586446706324415722155397
# 53697817977846174064955149290862569321978468622482
# 83972241375657056057490261407972968652414535100474
# 82166370484403199890008895243450658541227588666881
# 16427171479924442928230863465674813919123162824586
# 17866458359124566529476545682848912883142607690042
# 24219022671055626321111109370544217506941658960408
# 07198403850962455444362981230987879927244284909188
# 84580156166097919133875499200524063689912560717606
# 05886116467109405077541002256983155200055935729725
# 71636269561882670428252483600823257530420752963450
#
# > Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?
#
# ---
import os
import pprint
import time # Typically imported for sleep function, to slow down execution in terminal.
import typing
import decorators # Typically imported to compute execution duration of functions.
import numpy
import pandas
# problem statement input 1000 digit integer
input_list = [int(n) for n in "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"]
# problem statement request series length
series_len = 13
rows = len(input_list) - series_len
columns = series_len + 1
array = numpy.array(numpy.ones((rows,columns)))
# loop for each candidate
for i in range(rows):
# loop to fill out each candidate and store its product in the last column
for j in range(series_len):
array[i][j] = input_list[i+j]
array[i][-1] *= array[i][j]
# Cheat by using pandas to print out the maximum product and its associated series of integers.
df = pandas.DataFrame(array)
print(df.sort_values(by=series_len,ascending=False).head(1))