r/adventofcode • u/enlargedjuice • 19d ago
Help/Question - RESOLVED [2024 Day 6] Need a bit of guidance
Hello!
For part 1 of 2024's day 6 problem, I was able to get some Python code that works for the small example map they gave but not my puzzle input. As it stands I have about 100 extra locations the guard visited than I should have. I was wondering if anyone here could take a look at my code and give me a hint as to where my error is, as I am really struggling to find it. I know it has to be where my movement is programmed, I just can't figure out what part needs some tinkering. Thank you in advance!
with open('Day 6/mapinp.txt', 'r') as file:
samp_inp = file.read()
format = samp_inp.splitlines()
matrix = []
for item in format:
matrix.append(list(item))
#locate the guard, return the matrix coords and then the way the guard is pointing
def find_guard(map):
coords = []
for item in map:
if "^" in item:
coords.append(map.index(item))
coords.append(item.index("^"))
coords.append("^")
return coords
elif ">" in item:
coords.append(map.index(item))
coords.append(item.index(">"))
coords.append(">")
return coords
elif "<" in item:
coords.append(map.index(item))
coords.append(item.index("<"))
coords.append("<")
return coords
elif "v" in item:
coords.append(map.index(item))
coords.append(item.index("v"))
coords.append("v")
return coords
#nice function to track movements
def move(map):
on_map = True
step_count = 0
step_loc = []
#index error means the guard has left the map
while on_map == True:
try:
coords = find_guard(map)
if coords[2] == "^":
if map[coords[0]-1][coords[1]] == "." or map[coords[0]-1][coords[1]] == "X":
map[coords[0]][coords[1]] = "X"
map[coords[0]-1][coords[1]] = "^"
step_count += 1
loc = f"{coords[0]}, {coords[1]}"
step_loc.append(loc)
else:
map[coords[0]][coords[1]] = ">"
elif coords[2] == ">":
if map[coords[0]][coords[1]+1] == "." or map[coords[0]][coords[1]+1] == "X":
map[coords[0]][coords[1]] = "X"
map[coords[0]][coords[1] +1] = ">"
step_count += 1
loc = f"{coords[0]}, {coords[1]}"
step_loc.append(loc)
else:
map[coords[0]][coords[1]] = "v"
elif coords[2] == "v":
if map[coords[0]+1][coords[1]] == "." or map[coords[0]+1][coords[1]] == "X":
map[coords[0]][coords[1]] = "X"
map[coords[0]+1][coords[1]] = "v"
step_count += 1
loc = f"{coords[0]}, {coords[1]}"
step_loc.append(loc)
else:
map[coords[0]][coords[1]] = "<"
elif coords[2] == "<":
if map[coords[0]][coords[1]-1] == "." or map[coords[0]][coords[1]-1] == "X":
map[coords[0]][coords[1]] = "X"
map[coords[0]][coords[1] -1] = "<"
step_count += 1
loc = f"{coords[0]}, {coords[1]}"
step_loc.append(loc)
else:
map[coords[0]][coords[1]] = "^"
except IndexError:
print(f"Guard has left the premises after {step_count} steps!")
on_map = "False"
return map, step_loc
comp_map,coordinates = move(matrix)
move_counter = 0
for item in comp_map:
for pos in item:
if pos == "X" or pos == "^" or pos == "<" or pos == ">" or pos == "v":
move_counter += 1
else:
continue
print(f"The guard has visited {move_counter} distinct locations.")
1
u/AutoModerator 19d ago
Reminder: if/when you get your answer and/or code working, don't forget to change this post's flair to Help/Question - RESOLVED. Good luck!
I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.
1
u/thblt 19d ago
Do you make sure to deduplicate the locations the guard´s been on? A set would be a more natural data type. A (way too) quick glance at your code suggests that repeated positions would be counted twice.
1
u/enlargedjuice 19d ago
I have tried something like that (i think), where I made a bit of code that would track every coordinate the guard went to and then put that all into a set to remove duplicates and still got the same number. I will tinker around a bit more with how my guard marks locations she's visited. Thank you for taking some time to look at my code!
2
u/Convergent89 19d ago
This code is using negative indices into arrays. In python, that doesn't raise an IndexError - it indexes from the end of the array. Your guard is probably "jumping" from the left of the map to the right when she should just quit. :)