|
| 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