mirror of
https://github.com/jlengrand/project_euler.git
synced 2026-03-10 08:41:20 +00:00
71 lines
1.9 KiB
Python
Executable File
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))
|