Search
 
SCRIPT & CODE EXAMPLE
 

PYTHON

project euler problem 11 python

#time module for execution time
import time

#Time at the start of execution
start = time.time()

#Matrix given in the question
#I have copied it directly as a string
numbers = '''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'''

#As the matrix is in string format
#First we are splitting it row wise
numbers = numbers.strip().split('
')

#Once split row wise we are splitting it column wise also
#We are also converting the
#the items in matrix to int using map
numbers = [map(int,x.strip().split(' ')) for x in numbers]


def greatest_product(a):
	"""
	This function will take a matrix as input and then output
	the largest product that is possible in the Matrix
	Example: Consider
	a = [[40, 62, 76, 36],
	 	 [74, 04, 36, 16],
	 	 [23, 57, 05, 54],
	 	 [89, 19, 67, 48]]
	 ""ROW WISE CALCULATIONS""	 
	 In the first for loop we are calculating the values of
	 40*62*76*36, 74*04*36*16, 23*57*05*54,89*19*67*48
	 using iterations and then for every value generated 
	 we are checking if the value of the multiple is 
	 greater than 'largest'. If yes change its value
	 ""COLUMN WISE CALCULATIONS""
	 In the second for loop we are calculating the values of
	 40*74*23*89, 62*04*57*19, 76*36*05*67, 36*16*54*48
	 and if any of these values is greater than the 
	 'largest' value then we will change it.
	 ""DIAGONAL CALCULATIONS""
	 In the third for loop, the diagonal calculations are 
	 40*04*05*48, 36*36*57*89.
	 If any of the values is greater than the previous value 
	 of 'largest' then it will be changed
	 Finally the value of largest is returned
	"""
	largest = 0
	for i in a:
		multiple = reduce(lambda x,y:x*y,i)
		if multiple > largest:
			largest = multiple
	for j in xrange(len(a)):
		multiple = 1
		for k in xrange(len(a)):
			multiple = multiple*a[k][j]
		if multiple > largest:
			largest = multiple
	multiple = 1
	right_dia = 1
	for k in xrange(len(a)):
		multiple = multiple*a[k][k]
		right_dia *= a[len(a)-1-k][k]
	if multiple > largest:
		largest = multiple
	if right_dia > largest:
		largest = right_dia
	return largest

#A list to store the values of sub matrices
a = []

#For loop for generating sub matrices
#Try to understand this by considering a small
#example similar to the function above.
for i in range(len(numbers)-3):
	for j in range(len(numbers[0])-3):
		sub = []
		sub.append(numbers[i][j:j+4])
		sub.append(numbers[i+1][j:j+4])
		sub.append(numbers[i+2][j:j+4])
		sub.append(numbers[i+3][j:j+4])
		a.append(sub)

#Applying the greatest_product function 
# to all of the sub matrices
a = map(greatest_product,a)

#printing the biggest number in the list
print max(a)

#Total time taken for execution
print time.time() - start
Comment

PREVIOUS NEXT
Code Example
Python :: dynamic footer in django 
Python :: checking length of sets in python 
Python :: pandas heading 
Python :: import user model 
Python :: dictionary.com 
Python :: keep the user logged in even though user changes password django 
Python :: python format string with list 
Python :: char list python 
Python :: how to compare list and int in python 
Python :: python function create null matrix 
Python :: .translate python 
Python :: set default palette seaborn 
Python :: range in python 
Python :: python destructuring 
Python :: fix the size of a deque python 
Python :: github3 python 
Python :: gtk label set label 
Python :: python print bytes 
Python :: nth catalan number 
Python :: How to check the number of occurence of each character of a given string in python 
Python :: add element to list 
Python :: python power of e 
Python :: Math Module cos() Function in python 
Python :: string manipulation in python 
Python :: convert string to datetime python 
Python :: pytest monkeypatch 
Python :: append element to list py 
Python :: else if 
Python :: python convert np datetime to string 
Python :: what does abs do in python 
ADD CONTENT
Topic
Content
Source link
Name
1+1 =