diff --git a/2024/06/part2.py b/2024/06/part2.py index 65a7f5a..880cef5 100644 --- a/2024/06/part2.py +++ b/2024/06/part2.py @@ -1,5 +1,8 @@ from part1 import * + +verbose = False + thoughts = \ """ So, we can place an obstacle on each of the 130*130 - #obstacles = 16900 @@ -18,15 +21,32 @@ if __name__ == "__main__": m = Map() #m.load_map("testinput") m.load_map("input") + + # Prepare forked map for speed + forked_map = m.copy() + #forked_map = Map() + #forked_map.load_map("input") + begin_pos = m.pos + begin_direction = m.direction + loop_obstacles = [] + i = 0 while m.step(): + print(i) if verbose: print(m.pos, m.direction) # Create a copy - forked_map = m.copy() - forked_map.map[forked_map.next_pos()] = Map.Tiles.OBSTACLE.value + #forked_map = m.copy() + #forked_map = Map() + #forked_map.load_map("input") + #forked_map.map = m.map.copy() + 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] print(f"Forking at {forked_map.next_pos()}... ", end="") try: while forked_map.step(): @@ -36,6 +56,9 @@ if __name__ == "__main__": loop_obstacles.append(m.next_pos()) else: print("no loop.") + i += 1 + if i > 100: + break #m.show() #print(len(m.trace), m.trace) #print(len(set(m.trace)))