aoc.AOCDay(): add internal cache set for standard "have I seen this value?" situations. Adds SEEN (the set), seen_reset() and seen()

This commit is contained in:
Stefan Harmuth 2024-12-06 07:32:55 +01:00
parent 23283d3b66
commit 24cd561370

View File

@ -32,6 +32,7 @@ class AOCDay:
self._current_test_file = None
self._current_test_solution = None
self.DP = {}
self.SEEN = set()
self.__main_progress_bar_id = None
self.__main_progress_bar_pos = 0
self.progress_bars = {}
@ -68,12 +69,14 @@ class AOCDay:
if not measure_runtime or case_count < len(self.inputs[part]) - 1:
self.DP = {}
self.seen_reset()
answer = self._call_part_func(self.part_func[part])
else:
stopwatch = StopWatch(auto_start=False)
self.__main_progress_bar_pos = 1
for _ in tqdm(range(timeit_number), desc=f"Part {part+1}", leave=False):
self.DP = {}
self.seen_reset()
stopwatch.start()
answer = self._call_part_func(self.part_func[part])
stopwatch.stop()
@ -284,6 +287,16 @@ class AOCDay:
pbar = self.progress_bars[bar_id]
pbar.update(add)
def seen_reset(self):
self.SEEN = set()
def seen(self, value: Any, auto_add: bool = True) -> bool:
if value in self.SEEN:
return True
if auto_add:
self.SEEN.add(value)
return False
def print_solution(
day: int,