diff --git a/2020/day_9/encoding_error.py b/2020/day_9/encoding_error.py index 7675abb..6eacd01 100644 --- a/2020/day_9/encoding_error.py +++ b/2020/day_9/encoding_error.py @@ -1,20 +1,37 @@ -def is_sum(number, series): - for i in series: - if (number - i) in series: - return True +def find_pair_sum(number, series): + i = 0 + j = len(series) - 1 + series.sort() + + current = series[i] + series[j] + + while i < j: + current = series[i] + series[j] + if current == number: return True + + if current < number: i += 1 + if current > number: j -= 1 + return False + def find_contiguous_sum(number, series): - for i in range(0, len(series)): - for j in range(i, len(series)): - if sum(series[i:j + 1]) == number: - return series[i:j+1] + current = 0 + i = 0 + j = 0 + + while current != number: + if current < number: j += 1 + elif current > number: i += 1 + current = sum(series[i:j]) + + return series[i:j] -def solve_a(data, length): - for i in range(length, len(data)): +def solve_a(data): + for i in range(25, len(data)): number = data[i] - if not is_sum(number, data[i - length:i]): + if not find_pair_sum(number, data[i-25:i]): return number def solve_b(number, data): @@ -24,7 +41,7 @@ def solve_b(number, data): data = [int(line.strip()) for line in open('input')] -result = solve_a(data, 25) +result = solve_a(data) print(result) print(solve_b(result, data))