geo_analysisの日記

エンジニアになりたい無職のProjectEuler

プロジェクトオイラー11

プロジェクトオイラーの問題11をpythonで解きました。
問題

projecteuler.net

matrix = [(input()).split(' ') for i in range(20)] #行列として20×20のデータを記憶する
rows = range(20)
cols = range(20)
cells = [(row, col) for row in rows for col in cols]
for row, col in cells: #行列の各要素で10の位が0のときは0を消す
    if matrix[row][col][0] == '0':
        matrix[row][col] = matrix[row][col][1]

#行列の縦の連続した4つの要素の積のリストを作り、その中から最大値を見つける
row = 0
products_of_rows = []
while row < 17:
    for col in range(20):
        product_number = 1
        for i in range(4):
            product_number *= int(matrix[row + i][col])
        products_of_rows.append(product_number)
    row += 1
max_of_rows = max(products_of_rows)
print(products_of_rows)
#行列の横の連続した4つの要素の積のリストを作り、その中から最大値を見つける
col = 0
products_of_cols = []
while col < 17:
    for row in range(20):
        product_number = 1
        for i in range(4):
            product_number *= int(matrix[row][col + i])
        products_of_cols.append(product_number)
    col += 1
max_of_cols = max(products_of_cols)

#行列の右斜めの連続した4つの積のリストを作り、その中から最大値を見つける
products_of_rdiagonals = []
cells_up_to_17 = [(row, col) for row in range(17) for col in range(17)]
for row, col in cells_up_to_17:
    product_number = 1
    for i in range(4):
        product_number *= int(matrix[row + i][col + i])
    products_of_rdiagonals.append(product_number)
max_of_rdiagonals = max(products_of_rdiagonals)

#行列の左斜めの連続した4つの積のリストを作り、その中から最大値を見つける
products_of_ldiagonals = []
cells_up_to_17 = [(row, col) for row in range(17) for col in range(17)]
for row, col in cells_up_to_17:
    product_number = 1
    for i in range(4):
        product_number *= int(matrix[19 - row - i][col + i])
    products_of_ldiagonals.append(product_number)
max_of_ldiagonals = max(products_of_ldiagonals)

maximum = max(max_of_rows, max_of_cols, max_of_ldiagonals, max_of_rdiagonals)