The Python Project

Simple way to learn python.

Thứ Năm, 21 tháng 4, 2016

[#11] Largest product in a grid

In the 20×20 grid below, four numbers along a diagonal line have been marked in red.
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
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
The product of these numbers is 26 × 63 × 78 × 14 = 1788696.
What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?

def problem11(n):
        '''
        In the 20×20 grid below, four numbers along a diagonal line have been marked in red.

        08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
        49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
        81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
        52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
        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

        The product of these numbers is 26 × 63 × 78 × 14 = 1788696.

        What is the greatest product of n adjacent numbers in the same direction
        (up, down, left, right, or diagonally) in the 20×20 grid?
        '''
        b1 = [8,2,22,97,38,15,00,40,00,75,4,5,7,78,52,12,50,77,91,8]
        b2 = [49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0]
        b3 = [81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65]
        b4 = [52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,36,91]
        b5 = [22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80]
        b6 = [24,47,32,60,99,3,45,2,44,75,33,53,78,36,84,20,35,17,12,50]
        b7 = [32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70]
        b8 = [67,26,20,68,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21]
        b9 = [24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72]
        b10 = [21,36,23,9,75,00,76,44,20,45,35,14,0,61,33,97,34,31,33,95]
        b11 = [78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92]
        b12 = [16,39,5,42,96,35,31,47,55,58,88,24,00,17,54,24,36,29,85,57]
        b13 = [86,56,00,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58]
        b14 = [19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40]
        b15 = [4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66]
        b16 = [88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69]
        b17 = [4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36]
        b18 = [20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16]
        b19 = [20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54]
        b20 = [1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48]
        board = [b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17,b18,b19,b20]
        result = 0
        for i in range(len(board)):
            for j in range(len(board)):
                if j <= len(board) - n:
                    temp = 1
                    for x in range(n):#left to right
                        temp *= board[i][j + x]
                    if temp > result:
                        result = temp

                    temp = 1
                    for x in range(n):#up to down
                        temp *= board[j + x][i]
                    if temp > result:
                        result = temp

                if i <= len(board) - n and j <= len(board) - n:
                    temp = 1
                    for x in range(n):#up-left to down-right
                        temp *= board[i + x][j + x]
                    if temp > result:
                        result = temp
                        
                if i >= n - 1 and j <= len(board) - n:
                    temp = 1
                    for x in range(n):#up-right to down-left
                        temp *= board[j + x][i - x]
                    if temp > result:
                        result = temp
        return result

Thứ Ba, 19 tháng 4, 2016

[#10] Summation of primes

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million.

def isPrime(n):
        if n == 2 or n == 3:
            return True
        if n < 2 or n % 2 == 0:
            return False
        if n < 9:
            return True
        if n % 3 == 0:
            return False
        r = int(n**0.5)
        f = 5
        while f <= r:
            if n % f == 0:
                return False
            if n % (f + 2) == 0:
                return False
            f += 6
        return True


def problem10(n):
        '''
        The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
        Find the sum of all the primes below n.
        '''
        if n < 2:
            return 0
        if n < 3:
            return 2
        result = 2
        for i in range(3, n, 2):
            if isPrime(i):
                result += i
        return result

Thứ Hai, 18 tháng 4, 2016

[#9] Special Pythagorean triplet

A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
a2 + b2 = c2
For example, 32 + 42 = 9 + 16 = 25 = 52.
There exists exactly one Pythagorean triplet for which a + b + c = 1000.
Find the product abc.

def problem9(s = 1000):
        '''
        A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,
        a2 + b2 = c2
        For example, 32 + 42 = 9 + 16 = 25 = 52.
        There exists exactly one Pythagorean triplet for which a + b + c = 1000.
        Find the product abc.
        '''
        #a = m**2 + n**2
        #b = 2 * m * n
        #c = m**2 - n**2
        for n in range(1, s + 1):
            for m in range(1, s + 1):
                if m**2 + m * n == s // 2:
                    return 2 * m * n * (m**4 - n**4)

Chủ Nhật, 17 tháng 4, 2016

[#8] Largest product in a series

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?

def problem8(n):
        s = '1000-digit number'
        result = 0
        for i in range(len(s) - n):
            temp = 1
            for j in range(n):
                temp *= int(s[i + j])
            if temp > result:
                result = temp
        return result

Thứ Bảy, 16 tháng 4, 2016

[#7] 10001st prime

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
What is the 10 001st prime number?

def isPrime(n):
        if n == 2 or n == 3:
            return True
        if n < 2 or n % 2 == 0:
            return False
        if n < 9:
            return True
        if n % 3 == 0:
            return False
        r = int(n**0.5)
        f = 5
        while f <= r:
            if n % f == 0:
                return False
            if n % (f + 2) == 0:
                return False
            f += 6
        return True


def problem7(n):
        '''
        By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.
        What is the n'st prime number?
        '''
        if n == 1:
            return 2
        m = 1
        prime = 3
        while m != n:
            if isPrime(prime):
                m += 1
                result = prime
            prime += 2
        return result

[#6] Sum square difference

The sum of the squares of the first ten natural numbers is,
12 + 22 + ... + 102 = 385
The square of the sum of the first ten natural numbers is,
(1 + 2 + ... + 10)2 = 552 = 3025
Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 − 385 = 2640.
Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.

def problem6(n):
        '''
        The sum of the squares of the first ten natural numbers is,
        1^2 + 2^2 + ... + 10^2 = 385
        The square of the sum of the first ten natural numbers is,
        (1 + 2 + ... + 10^)2 = 55^2 = 3025
        Hence the difference between the sum of the squares of the first ten natural numbers
        and the square of the sum is 3025 − 385 = 2640.
        Find the difference between the sum of the squares of the first n natural numbers
        and the square of the sum.
        '''
        sum_of_square = n * (n + 1) * (2 * n + 1) // 6 #1^2 + 2^2 + ... + n^2 = n * (n + 1) * (2 * n + 1) // 6
        square_of_sum = (n * (n + 1) // 2) ** 2 #1 + 2 + ... + n = n * (n + 1) // 2
        return square_of_sum - sum_of_square

[#5] Smallest multiple

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.
What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
 
 

def isPrime(n):
        '''
        Check the number is prime or not.
        '''
        if n == 2 or n == 3:
            return True
        if n < 2 or n % 2 == 0:
            return False
        if n < 9:
            return True
        if n % 3 == 0:
            return False
        r = int(n**0.5)
        f = 5
        while f <= r:
            if n % f == 0:
                return False
            if n %(f+2) == 0:
                return False
            f += 6
        return True
def problem5(a, b):
        '''
        2520 is the smallest number that can be divided 
        by each of the numbers from 1 to 10 without any remainder.
        What is the smallest positive number that is evenly divisible
        by all of the numbers from a to b?
        '''
        prime = []#store prime number from a to b
        exp = []#store the exponent of prime
        for i in range(a, b + 1):
            if isPrime(i):
                prime += [i]
                exp += [1]
        for i in range(a, b + 1):
            if i == 1:
                continue
            if isPrime(i):
                continue
            temp = [0] * len(exp)#store exponent of prime in number i
            number = i
            for j in range(len(prime)):
                while number != 1:
                    if number % prime[j] == 0:
                        temp[j] +=1
                        number /= prime[j]
                    else:
                        break
            for x in range(len(exp)):
                    if temp[x] > exp[x]:
                        exp[x] = temp[x]
        result = 1
        for i in range (len(exp)):
                result *= prime[i]**exp[i]
        return result

Featured Documents

Customization

View more

Tips and Tricks

View more

Image Documents

View more

Tutorials

View more

Legal Documents

View more

Getting Started

View more