Files
project_euler/e_11.py
2012-01-16 10:13:57 +01:00

71 lines
1.9 KiB
Python
Executable File

#!/usr/bin/env python
"""
##---
# jlengrand
#Created on : Fri Jan 13 15:59:15 CET 2012
#
# DESCRIPTION : Solves problem 11 of Project Euler
What is the greatest product of four adjacent numbers in any direction
(up, down, left, right, or diagonally) in the 20x20 grid?
(gris is saved into e_11.data)
##---
"""
from operator import mul
def great_prod_grid(filename, square_size):
"""
Returns the greatest product of 4 adjacent numbers in the grid.
"""
data = load_data(filename)
great_prod = 0
max_val = []
for j in range(square_size):
for k in range(square_size):
# 3 possibilities here
a = data[j][k:k + 4]
b = []
c = []
d= []
try:
for l in range(4):
d.append(data[j - l][k - l])
except IndexError:
pass
try:
for l in range(4):
b.append(data[j + l][k])
except IndexError:
pass
try:
for l in range(4):
c.append(data[j + l][k - l])
except IndexError:
pass
for val in [a, b, c, d]:
prod = prod_list(val)
if prod > great_prod:
great_prod = prod
max_val = val
print max_val
return great_prod
def prod_list(data):
"""
Returns the product of all elements in a list of integers
"""
return reduce(mul, data)
def load_data(filename):
"""
Loads the data from a file into a table
"""
file = open(filename, "r")
data = []
for line in file :
data.append([int(el) for el in line.split( )])
file.close()
return data
if __name__ == '__main__':
print "Answer : %d" % (great_prod_grid("./e_11.data", 20))