Skip to content

Commit 52cf668

Browse files
jwmneucclauss
authored andcommitted
add sol3 to project_euler/problem_08 (TheAlgorithms#1557)
* Add sol3 for project_euler proble_03 * Update sol3.py add type hint remove unused variable * Format code with psf/black * add sol3 to project_euler/problem_08, modify the stepsize of the loop,will be faster than sol1
1 parent dd7d2fa commit 52cf668

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

project_euler/problem_08/sol3.py

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
The four adjacent digits in the 1000-digit number that have the greatest
4+
product are 9 × 9 × 8 × 9 = 5832.
5+
6+
73167176531330624919225119674426574742355349194934
7+
96983520312774506326239578318016984801869478851843
8+
85861560789112949495459501737958331952853208805511
9+
12540698747158523863050715693290963295227443043557
10+
66896648950445244523161731856403098711121722383113
11+
62229893423380308135336276614282806444486645238749
12+
30358907296290491560440772390713810515859307960866
13+
70172427121883998797908792274921901699720888093776
14+
65727333001053367881220235421809751254540594752243
15+
52584907711670556013604839586446706324415722155397
16+
53697817977846174064955149290862569321978468622482
17+
83972241375657056057490261407972968652414535100474
18+
82166370484403199890008895243450658541227588666881
19+
16427171479924442928230863465674813919123162824586
20+
17866458359124566529476545682848912883142607690042
21+
24219022671055626321111109370544217506941658960408
22+
07198403850962455444362981230987879927244284909188
23+
84580156166097919133875499200524063689912560717606
24+
05886116467109405077541002256983155200055935729725
25+
71636269561882670428252483600823257530420752963450
26+
27+
Find the thirteen adjacent digits in the 1000-digit number that have the
28+
greatest product. What is the value of this product?
29+
"""
30+
import sys
31+
32+
N = """73167176531330624919225119674426574742355349194934\
33+
96983520312774506326239578318016984801869478851843\
34+
85861560789112949495459501737958331952853208805511\
35+
12540698747158523863050715693290963295227443043557\
36+
66896648950445244523161731856403098711121722383113\
37+
62229893423380308135336276614282806444486645238749\
38+
30358907296290491560440772390713810515859307960866\
39+
70172427121883998797908792274921901699720888093776\
40+
65727333001053367881220235421809751254540594752243\
41+
52584907711670556013604839586446706324415722155397\
42+
53697817977846174064955149290862569321978468622482\
43+
83972241375657056057490261407972968652414535100474\
44+
82166370484403199890008895243450658541227588666881\
45+
16427171479924442928230863465674813919123162824586\
46+
17866458359124566529476545682848912883142607690042\
47+
24219022671055626321111109370544217506941658960408\
48+
07198403850962455444362981230987879927244284909188\
49+
84580156166097919133875499200524063689912560717606\
50+
05886116467109405077541002256983155200055935729725\
51+
71636269561882670428252483600823257530420752963450"""
52+
53+
54+
def streval(s: str) -> int:
55+
ret = 1
56+
for it in s:
57+
ret *= int(it)
58+
return ret
59+
60+
61+
def solution(n: str) -> int:
62+
"""Find the thirteen adjacent digits in the 1000-digit number n that have
63+
the greatest product and returns it.
64+
65+
>>> solution(N)
66+
23514624000
67+
"""
68+
LargestProduct = -sys.maxsize - 1
69+
substr = n[:13]
70+
cur_index = 13
71+
while cur_index < len(n) - 13:
72+
if int(n[cur_index]) >= int(substr[0]):
73+
substr = substr[1:] + n[cur_index]
74+
cur_index += 1
75+
else:
76+
LargestProduct = max(LargestProduct, streval(substr))
77+
substr = n[cur_index : cur_index + 13]
78+
cur_index += 13
79+
return LargestProduct
80+
81+
82+
if __name__ == "__main__":
83+
print(solution(N))

0 commit comments

Comments
 (0)