2024(6): troubleshooting be whut
This commit is contained in:
@ -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:
|
||||||
|
|||||||
@ -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)))
|
||||||
|
|||||||
Reference in New Issue
Block a user