diff --git a/day09.py b/day09.py index 19c9bf3..5092aa3 100644 --- a/day09.py +++ b/day09.py @@ -6,39 +6,28 @@ TEST_SOLUTION_PART1 = 127 TEST_SOLUTION_PART2 = 62 -class NumberCruncher: - def __init__(self, preamble): - self.buffer = [] - self.preamble = preamble - - def addNumber(self, number): - self.buffer.append(number) - if len(self.buffer) > self.preamble: - self.buffer = self.buffer[1:] - - def isValidNextNumber(self, number): - if len(self.buffer) < self.preamble: - return True - - for combination in itertools.combinations(self.buffer, 2): - if sum(combination) == number: - return True - - return False - - def part1(test_mode=False): my_input = aoclib.getInputAsArray(day=DAY, return_type=int, test=test_mode) if test_mode: - cruncher = NumberCruncher(5) + preamble = 5 else: - cruncher = NumberCruncher(25) + preamble = 25 - for i in my_input: - if not cruncher.isValidNextNumber(i): - return i + number_buffer = [] + for number in my_input: + if len(number_buffer) == preamble: + found_sum = False + for combination in itertools.combinations(number_buffer, 2): + if sum(combination) == number: + found_sum = True + break - cruncher.addNumber(i) + if not found_sum: + return number + + number_buffer.append(number) + if len(number_buffer) > preamble: + number_buffer = number_buffer[1:] return 0