プロジェクトオイラー11
プロジェクトオイラーの問題11をpythonで解きました。
問題
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)