Function Use: To print all the directories in a folder/sub-folder or directory import os def get_list_or_dir(local_dir): for dir_or_file in os.listdir(local_dir): if os.path.isdir(dir_or_file): path = os.path.join(local_dir, dir_or_file) print(dir_or_file, 'This is a directory') get_list_or_dir(path) else: print(dir_or_file) Path = os.getcwd() or define the path from where you need a file Function Call: get_list_or_dir(path)
Project Euler 11: What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?
You guys can get this programming ask from Project Euler.
This is the 11th question of this series. The solution of this question needs you to be good in matrix. You can find the solution below.
The Solution:
You have to find the greatest product of the four adjacent number and the number can should be in the same direction. So basically, if we start by first number of the series 08; then we can find only 3 adjacent number in the same direction and that will be:
1> 08 02 22 97(going in positive direction)
2> 08 49 81 52 (Going in down direction)
3> 08 49 31 23 (Going in positive diagonal direction)
but a number can have maximum 8 products in the same direction; for better understanding we have marked it in the red and you can also check the below image for better understanding.
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
Now, hoping that the below program will makes sense.
The Program
import time
start = time.time()
a = []
a.append('08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08')
a.append('49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00')
a.append('81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65')
a.append('52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91')
a.append('22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80')
a.append('24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50')
a.append('32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70')
a.append('67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21')
a.append('24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72')
a.append('21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95')
a.append('78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92')
a.append('16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57')
a.append('86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58')
a.append('19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40')
a.append('04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66')
a.append('88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69')
a.append('04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36')
a.append('20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16')
a.append('20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54')
a.append('01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48')
M = [i.split() for i in a]
M = [[int(j) for j in i] for i in M]
large = []
for i in range(3,17):
for j in range(3,17):
temp = []
#In the same column (Up)
temp.append(M[i][j]*M[i-1][j]*M[i-2][j]*M[i-3][j])
#In the same column (Down)
temp.append(M[i][j]*M[i+1][j]*M[i+2][j]*M[i+3][j])
#In the same row but the columns is in positive side
temp.append(M[i][j]*M[i][j+1]*M[i][j+2]*M[i][j+3])
#In the same row but the columns is in negative side
temp.append(M[i][j]*M[i][j-1]*M[i][j-2]*M[i][j-3])
#In the row negative and column positive side
temp.append(M[i][j]*M[i-1][j+1]*M[i-2][j+2]*M[i-3][j+3])
#In the row positive and column positive side
temp.append(M[i][j]*M[i+1][j+1]*M[i+2][j+2]*M[i+3][j+3])
#In the row positive and column negative side
temp.append(M[i][j]*M[i+1][j-1]*M[i+2][j-2]*M[i+3][j-3])
#In the same row positive and column negative side
temp.append(M[i][j]*M[i-1][j-1]*M[i-2][j-2]*M[i-3][j-3])
temp.sort()
# only taking the largest value in the large list
large.append(temp[len(temp)-1])
large.sort()
print large[len(large)-1]
timetaken = time.time() - start
print(timetaken)
This is the 11th question of this series. The solution of this question needs you to be good in matrix. You can find the solution below.
The Solution:
You have to find the greatest product of the four adjacent number and the number can should be in the same direction. So basically, if we start by first number of the series 08; then we can find only 3 adjacent number in the same direction and that will be:
1> 08 02 22 97(going in positive direction)
2> 08 49 81 52 (Going in down direction)
3> 08 49 31 23 (Going in positive diagonal direction)
but a number can have maximum 8 products in the same direction; for better understanding we have marked it in the red and you can also check the below image for better understanding.
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
Now, hoping that the below program will makes sense.
The Program
import time
start = time.time()
a = []
a.append('08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08')
a.append('49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00')
a.append('81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65')
a.append('52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91')
a.append('22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80')
a.append('24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50')
a.append('32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70')
a.append('67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21')
a.append('24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72')
a.append('21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95')
a.append('78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92')
a.append('16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57')
a.append('86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58')
a.append('19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40')
a.append('04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66')
a.append('88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69')
a.append('04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36')
a.append('20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16')
a.append('20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54')
a.append('01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48')
M = [i.split() for i in a]
M = [[int(j) for j in i] for i in M]
large = []
for i in range(3,17):
for j in range(3,17):
temp = []
#In the same column (Up)
temp.append(M[i][j]*M[i-1][j]*M[i-2][j]*M[i-3][j])
#In the same column (Down)
temp.append(M[i][j]*M[i+1][j]*M[i+2][j]*M[i+3][j])
#In the same row but the columns is in positive side
temp.append(M[i][j]*M[i][j+1]*M[i][j+2]*M[i][j+3])
#In the same row but the columns is in negative side
temp.append(M[i][j]*M[i][j-1]*M[i][j-2]*M[i][j-3])
#In the row negative and column positive side
temp.append(M[i][j]*M[i-1][j+1]*M[i-2][j+2]*M[i-3][j+3])
#In the row positive and column positive side
temp.append(M[i][j]*M[i+1][j+1]*M[i+2][j+2]*M[i+3][j+3])
#In the row positive and column negative side
temp.append(M[i][j]*M[i+1][j-1]*M[i+2][j-2]*M[i+3][j-3])
#In the same row positive and column negative side
temp.append(M[i][j]*M[i-1][j-1]*M[i-2][j-2]*M[i-3][j-3])
temp.sort()
# only taking the largest value in the large list
large.append(temp[len(temp)-1])
large.sort()
print large[len(large)-1]
timetaken = time.time() - start
print(timetaken)

Comments
Post a Comment