Code Duplication    Length = 17-19 lines in 3 locations

solutions/problem11.py 3 locations

@@ 127-145 (lines=19) @@
124
    return answer
125
126
127
def diagonal_reverse(grid: List[List[int]], run_len: int) -> int:
128
    """ Find the maximal `run_len` long product in the 'reverse' diagonal direction
129
130
    The 'reverse' diagonal is defined as bottom-left to top-right when viewed in the C-array style convention.
131
132
    :param grid: the two-dimensional integer grid
133
    :param run_len: the product run-length
134
    :return: the maximum `run_len` long product in the reverse diagonal direction from `grid`
135
    """
136
137
    answer = 0
138
    n, m = len(grid), len(grid[0])
139
    for i in range(run_len - 1, n):
140
        for j in range(m - run_len+1):
141
            product = 1
142
            for k in range(run_len):
143
                product *= grid[i-k][j+k]
144
            answer = max(answer, product)
145
    return answer
146
147
148
def solve():
@@ 106-124 (lines=19) @@
103
    return answer
104
105
106
def diagonal_natural(grid: List[List[int]], run_len: int) -> int:
107
    """ Find the maximal `run_len` long product in the 'natural' diagonal direction
108
109
    The 'natural' diagonal is defined as top-left to bottom-right when viewed in the C-array style convention.
110
111
    :param grid: the two-dimensional integer grid
112
    :param run_len: the product run-length
113
    :return: the maximum `run_len` long product in the natural diagonal direction from `grid`
114
    """
115
116
    answer = 0
117
    n, m = len(grid), len(grid[0])
118
    for i in range(n - run_len+1):
119
        for j in range(m - run_len+1):
120
            product = 1
121
            for k in range(run_len):
122
                product *= grid[i+k][j+k]
123
            answer = max(answer, product)
124
    return answer
125
126
127
def diagonal_reverse(grid: List[List[int]], run_len: int) -> int:
@@ 87-103 (lines=17) @@
84
    return answer
85
86
87
def vertical(grid: List[List[int]], run_len: int) -> int:
88
    """ Find the maximal `run_len` long product in the vertical direction
89
90
    :param grid: the two-dimensional integer grid
91
    :param run_len: the product run-length
92
    :return: the maximum `run_len` long product in the vertical direction from `grid`
93
    """
94
95
    answer = 0
96
    n, m = len(grid), len(grid[0])
97
    for i in range(n - run_len + 1):
98
        for j in range(m):
99
            product = 1
100
            for k in range(run_len):
101
                product *= grid[i+k][j]
102
            answer = max(answer, product)
103
    return answer
104
105
106
def diagonal_natural(grid: List[List[int]], run_len: int) -> int: