day 9 p1 simplified

This commit is contained in:
Stefan Harmuth 2020-12-09 06:30:27 +01:00
parent 9391bc2b12
commit 31eeead0f7

View File

@ -6,39 +6,28 @@ TEST_SOLUTION_PART1 = 127
TEST_SOLUTION_PART2 = 62 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): def part1(test_mode=False):
my_input = aoclib.getInputAsArray(day=DAY, return_type=int, test=test_mode) my_input = aoclib.getInputAsArray(day=DAY, return_type=int, test=test_mode)
if test_mode: if test_mode:
cruncher = NumberCruncher(5) preamble = 5
else: else:
cruncher = NumberCruncher(25) preamble = 25
for i in my_input: number_buffer = []
if not cruncher.isValidNextNumber(i): for number in my_input:
return i 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 return 0