From e28df05c1eb466a2751a408e8e1a61b6a991f278 Mon Sep 17 00:00:00 2001 From: Kees van Kempen Date: Fri, 27 Dec 2024 12:29:24 +0100 Subject: [PATCH] 2024(6): troubleshooting be whut --- 2024/06/part1.py | 6 ++++-- 2024/06/part2.py | 16 ++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/2024/06/part1.py b/2024/06/part1.py index 159d128..87bbb63 100644 --- a/2024/06/part1.py +++ b/2024/06/part1.py @@ -3,7 +3,7 @@ from enum import Enum import copy -verbose = False +verbose = True class Map: """ @@ -102,6 +102,7 @@ class Map: self.trace.append(self.pos) self.direction = self.map[self.pos] self.map[self.pos] = self.Tiles.FREE.value + self.pos_counter = np.zeros(self.map.shape) class LoopException(Exception): """ @@ -128,6 +129,7 @@ class Map: # TODO: Really take a step! Do not only turn. self.pos = self.next_pos() self.trace.append(self.pos) + self.pos_counter[self.pos] += 1 return True elif next_tile == self.Tiles.OBSTACLE: self.direction = self.next_direction(self.direction) @@ -158,7 +160,7 @@ class Map: least twice from at least one direction. """ - return self.trace.count(self.pos) > 4 + return self.pos_counter[self.pos] > 4 def copy(self): if verbose: diff --git a/2024/06/part2.py b/2024/06/part2.py index 880cef5..7cf1580 100644 --- a/2024/06/part2.py +++ b/2024/06/part2.py @@ -19,13 +19,14 @@ position; see Pigeonhole principle). if __name__ == "__main__": m = Map() - #m.load_map("testinput") - m.load_map("input") + m.load_map("testinput") + #m.load_map("input") # Prepare forked map for speed - forked_map = m.copy() - #forked_map = Map() + #forked_map = m.copy() + forked_map = Map() #forked_map.load_map("input") + forked_map.load_map("testinput") begin_pos = m.pos begin_direction = m.direction @@ -42,11 +43,14 @@ if __name__ == "__main__": #forked_map = Map() #forked_map.load_map("input") #forked_map.map = m.map.copy() + print(f"Forking map, setting obstacle at {m.next_pos()}, resetting current {m.pos} to {m.map[m.pos]}") + forked_map.show() forked_map.map[m.next_pos()] = Map.Tiles.OBSTACLE.value forked_map.map[m.pos] = m.map[m.pos] forked_map.pos = begin_pos forked_map.direction = begin_direction forked_map.trace = [begin_pos] + forked_map.show() print(f"Forking at {forked_map.next_pos()}... ", end="") try: while forked_map.step(): @@ -57,8 +61,8 @@ if __name__ == "__main__": else: print("no loop.") i += 1 - if i > 100: - break + #if i > 100: + # break #m.show() #print(len(m.trace), m.trace) #print(len(set(m.trace)))