-
Notifications
You must be signed in to change notification settings - Fork 0
/
Q8: LargestProduct
101 lines (87 loc) · 3.3 KB
/
Q8: LargestProduct
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
"""
Created on Sun May 6 22:50:24 2018
@author: Liv d'Aliberti
"""
#The four adjacent digits in the 1000-digit number that have the greatest
#product are 9 × 9 × 8 × 9 = 5832.
large_number = """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?
large_number = large_number.replace("\n", "")
def flatten(nested_list):
"""
Purpose: take nested lists of numbers and make a "flattened list
that returns a list of all the elements in each of the inner lists
Input: A list of lists (nested_list)
Output: A new list of all elements in each of the inner lists of
nested_list. (new_list)
Rule: make sure the nested_list remains unchanged
"""
new_list = []
#new_list = []
for i in nested_list:
#print(i)
for j in i:
#print(j)
new_list.append(j)
#print(nested_list)
return(new_list)
def greatest_product(large_number):
"""
Input: String
Output: Integer
Purpose: Input the string of a very large number, and output
the largest product of the sum of 13 adjacent digits in this
very large number
"""
n = 13
j = 0
solution_list = []
multiplied_number = 1
numbers_dictionary = {}
max_number = 0
#This code creates the potential solution set
while j < 13:
solution_list.append([large_number[i:i+n]
for i in range(j,len(large_number),n) ])
j = j + 1
solution_list = flatten(solution_list)
for i in solution_list:
if len(i) != 13:
solution_list.remove(i)
solution_set = set(solution_list)
#This code creates a dictionary with all of the
#multiplied possibilities
for numbers in solution_set:
for number in numbers:
number = int(number)
multiplied_number = number * multiplied_number
#print(multiplied_number)
numbers_dictionary[numbers] = multiplied_number
multiplied_number = 1
#This code finds the largest multipied solution from
#the set of solutions
for i in numbers_dictionary:
if numbers_dictionary[i] > max_number:
max_number = numbers_dictionary[i]
return(max_number)
#For this particular problem, the solution is 23514624000