Skip to content

Commit

Permalink
20-1
Browse files Browse the repository at this point in the history
We don't need to calculate subpaths every time, just splice the original shortest path

20-1 optimisations
  • Loading branch information
koosvary committed Dec 20, 2024
1 parent 4b57113 commit b9bafb8
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
55 changes: 55 additions & 0 deletions 2024/20/20-1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import networkx as nx

map = set()
directions = [(1, 0), (0, 1), (-1, 0), (0, -1)]

minimumStepsSaved = 100
picosecondsCheatable = 2
totalGoodCheats = 0

with open('2024/20/input.txt') as f:
g = nx.DiGraph()
for j, line in enumerate(f):
line = line.strip()
for i, char in enumerate(line):
if char == '#':
continue

if char == 'E':
e = (i, j)
if char == 'S':
s = (i, j) # reindeer starts pointing west

map.add((i,j))

for node in map:
x, y = node
for direction in directions:
dirX, dirY = direction
neighbour = (x + dirX, y + dirY)

if neighbour in map:
g.add_edge(node, neighbour, weight=1)


shortestPath = nx.shortest_path(g, s, e, weight='weight')

print(shortestPath)

# new idea since brute force blows
# try find nodes with manhattan distance of 2, subtract the steps between these two points
# the time saved should be this subpath's distance, no?
for i, node in enumerate(shortestPath):
for j, otherNode in enumerate(shortestPath):
if i > j or node == otherNode:
continue

manhattanDistance = abs(node[0] - otherNode[0]) + abs(node[1] - otherNode[1])

if 2 <= manhattanDistance <= picosecondsCheatable:
newPath = shortestPath[:i+1] + shortestPath[j-1:] # gotta keep the start and end in the original path
stepsSaved = len(shortestPath) - len(newPath)
if stepsSaved >= minimumStepsSaved:
totalGoodCheats += 1

print(totalGoodCheats)
15 changes: 15 additions & 0 deletions 2024/20/testinput.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
###############
#...#...#.....#
#.#.#.#.#.###.#
#S#...#.#.#...#
#######.#.#.###
#######.#.#...#
#######.#.###.#
###..E#...#...#
###.#######.###
#...###...#...#
#.#####.#.###.#
#.#...#.#.#...#
#.#.#.#.#.#.###
#...#...#...###
###############

0 comments on commit b9bafb8

Please sign in to comment.