I started solving Project Euler problems this month. Check out the Project Euler tab of this blog for a list of the problems I’ve solved (with solutions) till date. Here’s a problem you might find interesting:
Here’s my solution using Python (I basically search through the entire matrix which is of O(n²) complexity):
I first copy the maxtrix into a text file euler11.txt so that it can be later read into Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
I then execute the following code from the same working directory as euler11.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# import numpy module for matrix operations | |
from numpy import * | |
# read the file with the matrix of numbers | |
filename = 'euler11.txt' | |
# store each line of the file into an array | |
with open(filename, "r") as ins: | |
array = [] | |
for line in ins: | |
array.append(line) | |
print array | |
# create a new array that converts the number strings into number integers | |
newArray = [] | |
for i in array: | |
j = i.split(' ') | |
k = [int(n) for n in j] | |
newArray.append(k) | |
print newArray | |
# convert the array of integers into a matrix of integers | |
problemMatrix = matrix(newArray) | |
print problemMatrix | |
# set initial maximum product to be a dummy number, say 1 | |
maxProd = 1 | |
# search all combinations for maximum product | |
for i in range(16): | |
for j in range(16): | |
prod1 = problemMatrix[i,j]*problemMatrix[i+1,j]*problemMatrix[i+2,j]*problemMatrix[i+3,j] | |
if prod1 > maxProd: | |
maxProd = prod1 | |
prod2 = problemMatrix[i,j]*problemMatrix[i,j+1]*problemMatrix[i,j+2]*problemMatrix[i,j+3] | |
if prod2 > maxProd: | |
maxProd = prod2 | |
prod3 = problemMatrix[i,j]*problemMatrix[i+1,j+1]*problemMatrix[i+2,j+2]*problemMatrix[i+3,j+3] | |
if prod3 > maxProd: | |
maxProd = prod3 | |
prod4 = problemMatrix[19-i,j]*problemMatrix[18-i,j+1]*problemMatrix[17-i,j+2]*problemMatrix[16-i,j+3] | |
if prod4 > maxProd: | |
maxProd = prod4 | |
print maxProd | |
Answer: 70600674
This is a little bit late, but I just found this and think the loop sequence is very clean, but I was wondering why you wouldn’t substitute all your top lines for this:
problemMatrix = np.loadtxt(“euler11.txt”)
Is there some benefit to your method?
Really like the blog btw
LikeLiked by 1 person