2024(6): troubleshooting be whut

This commit is contained in:
2024-12-27 12:29:24 +01:00
parent efe6e5a0c3
commit e28df05c1e
2 changed files with 14 additions and 8 deletions

View File

@ -3,7 +3,7 @@ from enum import Enum
import copy import copy
verbose = False verbose = True
class Map: class Map:
""" """
@ -102,6 +102,7 @@ class Map:
self.trace.append(self.pos) self.trace.append(self.pos)
self.direction = self.map[self.pos] self.direction = self.map[self.pos]
self.map[self.pos] = self.Tiles.FREE.value self.map[self.pos] = self.Tiles.FREE.value
self.pos_counter = np.zeros(self.map.shape)
class LoopException(Exception): class LoopException(Exception):
""" """
@ -128,6 +129,7 @@ class Map:
# TODO: Really take a step! Do not only turn. # TODO: Really take a step! Do not only turn.
self.pos = self.next_pos() self.pos = self.next_pos()
self.trace.append(self.pos) self.trace.append(self.pos)
self.pos_counter[self.pos] += 1
return True return True
elif next_tile == self.Tiles.OBSTACLE: elif next_tile == self.Tiles.OBSTACLE:
self.direction = self.next_direction(self.direction) self.direction = self.next_direction(self.direction)
@ -158,7 +160,7 @@ class Map:
least twice from at least one direction. least twice from at least one direction.
""" """
return self.trace.count(self.pos) > 4 return self.pos_counter[self.pos] > 4
def copy(self): def copy(self):
if verbose: if verbose:

View File

@ -19,13 +19,14 @@ position; see Pigeonhole principle).
if __name__ == "__main__": if __name__ == "__main__":
m = Map() m = Map()
#m.load_map("testinput") m.load_map("testinput")
m.load_map("input") #m.load_map("input")
# Prepare forked map for speed # Prepare forked map for speed
forked_map = m.copy() #forked_map = m.copy()
#forked_map = Map() forked_map = Map()
#forked_map.load_map("input") #forked_map.load_map("input")
forked_map.load_map("testinput")
begin_pos = m.pos begin_pos = m.pos
begin_direction = m.direction begin_direction = m.direction
@ -42,11 +43,14 @@ if __name__ == "__main__":
#forked_map = Map() #forked_map = Map()
#forked_map.load_map("input") #forked_map.load_map("input")
#forked_map.map = m.map.copy() #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.next_pos()] = Map.Tiles.OBSTACLE.value
forked_map.map[m.pos] = m.map[m.pos] forked_map.map[m.pos] = m.map[m.pos]
forked_map.pos = begin_pos forked_map.pos = begin_pos
forked_map.direction = begin_direction forked_map.direction = begin_direction
forked_map.trace = [begin_pos] forked_map.trace = [begin_pos]
forked_map.show()
print(f"Forking at {forked_map.next_pos()}... ", end="") print(f"Forking at {forked_map.next_pos()}... ", end="")
try: try:
while forked_map.step(): while forked_map.step():
@ -57,8 +61,8 @@ if __name__ == "__main__":
else: else:
print("no loop.") print("no loop.")
i += 1 i += 1
if i > 100: #if i > 100:
break # break
#m.show() #m.show()
#print(len(m.trace), m.trace) #print(len(m.trace), m.trace)
#print(len(set(m.trace))) #print(len(set(m.trace)))