Example #1
0
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48'''
grid = []
[grid.append(line.split(' ')) for line in nums.split('\n')]

high = 0
for r in range(3, 17):
    for c in range(3, 17):
        high = max(high, prod([int(grid[r - i][c]) for i in range(0, 4)]))      #up
        high = max(high, prod([int(grid[r + i][c]) for i in range(0, 4)]))      #down
        high = max(high, prod([int(grid[r][c - i]) for i in range(0, 4)]))      #left
        high = max(high, prod([int(grid[r][c + i]) for i in range(0, 4)]))      #right
        high = max(high, prod([int(grid[r - i][c - i]) for i in range(0, 4)]))  #upleft
        high = max(high, prod([int(grid[r - i][c + i]) for i in range(0, 4)]))  #upright
        high = max(high, prod([int(grid[r + i][c - i]) for i in range(0, 4)]))  #downleft
        high = max(high, prod([int(grid[r + i][c + i]) for i in range(0, 4)]))  #downright
print(high)
Example #2
0
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48'''
grid = []
[grid.append(line.split(' ')) for line in nums.split('\n')]

high = 0
for r in range(3, 17):
    for c in range(3, 17):
        high = max(high, prod([int(grid[r - i][c]) for i in range(0, 4)]))  #up
        high = max(high,
                   prod([int(grid[r + i][c]) for i in range(0, 4)]))  #down
        high = max(high,
                   prod([int(grid[r][c - i]) for i in range(0, 4)]))  #left
        high = max(high,
                   prod([int(grid[r][c + i]) for i in range(0, 4)]))  #right
        high = max(high, prod([int(grid[r - i][c - i])
                               for i in range(0, 4)]))  #upleft
        high = max(high, prod([int(grid[r - i][c + i])
                               for i in range(0, 4)]))  #upright
        high = max(high, prod([int(grid[r + i][c - i])
                               for i in range(0, 4)]))  #downleft
        high = max(high, prod([int(grid[r + i][c + i])
                               for i in range(0, 4)]))  #downright
print(high)
Example #3
0
#===============================================================================
# If dn represents the nth digit of the fractional part, find the value of the following expression.
#
# d1  d10  d100  d1000  d10000  d100000  d1000000
#===============================================================================

from Common import prod

intConcat = ''
n = 0
while len(intConcat) <= 1000000:
    intConcat += str(n)
    n += 1

print(prod([int(intConcat[10**i]) for i in range(7)]))
Example #4
0
#===============================================================================
# If dn represents the nth digit of the fractional part, find the value of the following expression.
# 
# d1  d10  d100  d1000  d10000  d100000  d1000000
#===============================================================================

from Common import prod

intConcat = ''
n = 0
while len(intConcat) <= 1000000:
    intConcat += str(n)
    n += 1

print(prod([int(intConcat[10 ** i]) for i in range(7)]))
Example #5
0
#===============================================================================
# Considering quadratics of the form:
# 
# n^2 + an + b, where |a| < 1000 and |b| < 1000
# 
# Find the product of the coefficients, a and b, for the quadratic expression that produces the maximum number of primes for consecutive values of n, 
# starting with n = 0.
#===============================================================================

from Common import isPrime, prod

highStreak = 0
coefficients = []
for a in range(-999, 1000):
    for b in range(-999, 1000):
        count = 0
        n = 0
        while isPrime(n ** 2 + a * n + b):
            count += 1
            n += 1
        if count > highStreak:
            highStreak = count
            coefficients = [a, b]
print(prod(coefficients))
Example #6
0
# 
# There are exactly four non-trivial examples of this type of fraction, less than one in value, and containing two digits in the numerator and denominator.
# 
# If the product of these four fractions is given in its lowest common terms, find the value of the denominator.
#===============================================================================

from Common import prod, gcd

class Fraction:
    
    def __init__(self, num, den):
        self.num = num
        self.den = den
    
    def __eq__(self, other):
        return self.num * other.den == other.num * self.den

specials = []
for d in range(11, 100):
    for n in range(11, d):
        if n == d or (n % 10 == 0 and d % 10 == 0):
            continue
        for c in str(n):
            if c in str(d):
                frac = Fraction(n, d)
                canc = Fraction(int(str(n).replace(c, '', 1)), int(str(d).replace(c, '', 1)))
                if frac == canc:
                    specials.append(frac)
num = prod([f.num for f in specials])
den = prod([f.den for f in specials])
print(den // gcd(num, den))
Example #7
0
#===============================================================================
# Find the greatest product of five consecutive digits in the 1000-digit number.
#===============================================================================

from Common import prod

n = '''73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450'''
n = n.replace('\n', '')

print(max([(prod([int(n[d]) for d in range(i, i + 5)])) for i in range(996)]))
Example #8
0
#
# If the product of these four fractions is given in its lowest common terms, find the value of the denominator.
#===============================================================================

from Common import prod, gcd


class Fraction:
    def __init__(self, num, den):
        self.num = num
        self.den = den

    def __eq__(self, other):
        return self.num * other.den == other.num * self.den


specials = []
for d in range(11, 100):
    for n in range(11, d):
        if n == d or (n % 10 == 0 and d % 10 == 0):
            continue
        for c in str(n):
            if c in str(d):
                frac = Fraction(n, d)
                canc = Fraction(int(str(n).replace(c, '', 1)),
                                int(str(d).replace(c, '', 1)))
                if frac == canc:
                    specials.append(frac)
num = prod([f.num for f in specials])
den = prod([f.den for f in specials])
print(den // gcd(num, den))