以下に、ハウスグラスパターンを見つけるためのいくつかの方法と、それぞれの方法のコード例を示します。
-
ブルートフォース法: 2次元配列のすべての要素について、ハウスグラスパターンの形状を検証します。各要素を中心としてハウスグラスの形状をチェックし、最大のハウスグラスパターンを見つけます。
def find_hourglass(arr): max_sum = float('-inf') for i in range(len(arr) - 2): for j in range(len(arr[i]) - 2): current_sum = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2] max_sum = max(max_sum, current_sum) return max_sum
-
動的計画法(Dynamic Programming): ハウスグラスパターンの形状をメモ化しながら、2次元配列を走査します。最後に、最大のハウスグラスパターンの合計値を取得します。
def find_hourglass(arr): max_sum = float('-inf') memo = [[0] * len(arr[0]) for _ in range(len(arr))] for i in range(len(arr) - 2): for j in range(len(arr[i]) - 2): if i == 0 and j == 0: memo[i][j] = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2] else: memo[i][j] = arr[i][j] + arr[i][j+1] + arr[i][j+2] + arr[i+1][j+1] + arr[i+2][j] + arr[i+2][j+1] + arr[i+2][j+2] + memo[i-1][j-1] max_sum = max(max_sum, memo[i][j]) return max_sum
これらはハウスグラスパターンを見つけるための2つの一般的なアプローチです。他にもさまざまな方法がありますが、上記のコード例を参考にしてみてください。