diff --git a/challenges/2024/06-guardGallivant/main.py b/challenges/2024/06-guardGallivant/main.py index 72c3967..12b030a 100644 --- a/challenges/2024/06-guardGallivant/main.py +++ b/challenges/2024/06-guardGallivant/main.py @@ -13,28 +13,35 @@ def find_start(g: grid.Grid) -> coord.Coordinate: if g[pos] == "^": return pos assert False, "no start point found" - - + + def modplus(x: int) -> int: return (x + 1) % 4 - -dirs = [coord.Direction.Up, coord.Direction.Right, coord.Direction.Down, coord.Direction.Left] + +dirs = [ + coord.Direction.Up, + coord.Direction.Right, + coord.Direction.Down, + coord.Direction.Left, +] class LoopEncounteredException(Exception): pass -def trace(g: grid.Grid, guard_pos: coord.Coordinate, guard_direction: int) -> set[tuple[coord.Coordinate, int]]: +def trace( + g: grid.Grid, guard_pos: coord.Coordinate, guard_direction: int +) -> set[tuple[coord.Coordinate, int]]: visited_sequence = set() - + while guard_pos in g: if (guard_pos, guard_direction) in visited_sequence: raise LoopEncounteredException - + visited_sequence.add((guard_pos, guard_direction)) - + nc = coord.add(guard_pos, dirs[guard_direction % 4].delta()) if nc in g and g[nc] == "#": guard_direction = modplus(guard_direction) @@ -51,11 +58,11 @@ def one(instr: str) -> int: def two(instr: str) -> int: g = parse(instr) - + start_pos = find_start(g) seq = trace(g, start_pos, 0) known_blocks = set() - + for (pos, _) in tqdm(seq, file=sys.stderr): assert pos in g, "pos off the rails" g[pos] = "#" @@ -64,7 +71,7 @@ def two(instr: str) -> int: except LoopEncounteredException: known_blocks.add(pos) g[pos] = "." - + return len(known_blocks) @@ -81,4 +88,4 @@ if __name__ == "__main__": if sys.argv[1] == "1": print(one(inp)) else: - print(two(inp)) \ No newline at end of file + print(two(inp)) diff --git a/challenges/2024/06-guardGallivant/sample.txt b/challenges/2024/06-guardGallivant/sample.txt deleted file mode 100644 index a4eb402..0000000 --- a/challenges/2024/06-guardGallivant/sample.txt +++ /dev/null @@ -1,10 +0,0 @@ -....#..... -.........# -.......... -..#....... -.......#.. -.......... -.#..^..... -........#. -#......... -......#...