diff --git a/hands_on/local_maxima_part2/local_maxima.py b/hands_on/local_maxima_part2/local_maxima.py index db89ba3..7857b7c 100644 --- a/hands_on/local_maxima_part2/local_maxima.py +++ b/hands_on/local_maxima_part2/local_maxima.py @@ -7,4 +7,27 @@ def find_maxima(x): Output: idx -- list of indices of the local maxima in x """ - return [] + maxima = [] + for idx in range(len(x)): + if idx == 0: + if x[idx] >= x[idx+1]: + maxima.append(idx) + elif idx == len(x)-1: + if x[idx] >= x[idx-1]: + maxima.append(idx) + else: + if x[idx] >= x[idx+1] and x[idx] >= x[idx-1]: + maxima.append(idx) + return maxima + + +if __name__ == "__main__": + values = [ + [1, 3, -2, 0, 2, 1], + [4,2,1,3,1,5], + [], + [1,2,2,1], + [1,2,2,3,1], + ] + for value in values: + print(find_maxima(value)) diff --git a/hands_on/local_maxima_part2/test_local_maxima.py b/hands_on/local_maxima_part2/test_local_maxima.py index 316442d..aa2872c 100644 --- a/hands_on/local_maxima_part2/test_local_maxima.py +++ b/hands_on/local_maxima_part2/test_local_maxima.py @@ -23,8 +23,14 @@ def test_find_maxima_empty(): def test_find_maxima_plateau(): - raise Exception('not yet implemented') - + values = [1,2,2,1] + expected = [1,2] + maxima = find_maxima(values) + assert maxima == expected + def test_find_maxima_not_a_plateau(): - raise Exception('not yet implemented') + values = [1,2,2,3,1] + expected = [3] + maxima = find_maxima(values) + assert maxima == expected