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
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