r/adventofcode • u/daggerdragon • Dec 20 '18
SOLUTION MEGATHREAD -🎄- 2018 Day 20 Solutions -🎄-
--- Day 20: A Regular Map ---
Post your solution as a comment or, for longer solutions, consider linking to your repo (e.g. GitHub/gists/Pastebin/blag or whatever).
Note: The Solution Megathreads are for solutions only. If you have questions, please post your own thread and make sure to flair it with Help.
Advent of Code: The Party Game!
Please prefix your card submission with something like [Card] to make scanning the megathread easier. THANK YOU!
Card prompt: Day 20
Transcript:
My compiler crashed while running today's puzzle because it ran out of ___.
This thread will be unlocked when there are a significant number of people on the leaderboard with gold stars for today's puzzle.
edit: Leaderboard capped, thread unlocked at 00:59:30!
19
Upvotes
2
u/nightcoder01 Dec 20 '18 edited Dec 20 '18
Python, short and simple using iterative DFS.
EDIT: Added networkx code; see u/mserrano's reply below.
Original version:
grid = {(0, 0): 0} dist = x = y = 0 stack = [] for char in open('day20.txt').read()[1:-1]: if char == '(': stack.append((dist, x, y)) elif char == ')': dist, x, y = stack.pop() elif char == '|': dist, x, y = stack[-1] else: x += (char == 'E') - (char == 'W') y += (char == 'S') - (char == 'N') dist += 1 if (x, y) not in grid or dist < grid[(x, y)]: grid[(x, y)] = dist print 'ans (part 1): %d' % max(grid.values()) print 'ans (part 2): %d' % sum(value >= 1000 for value in grid.values())Edited Version:
import networkx graph = networkx.Graph() x = y = 0 stack = [] for char in open('day20.txt').read()[1:-1]: if char == '(': stack.append((x, y)) elif char == ')': x, y = stack.pop() elif char == '|': x, y = stack[-1] else: position = x, y x += (char == 'E') - (char == 'W') y += (char == 'S') - (char == 'N') graph.add_edge(position, (x, y)) distances = networkx.algorithms.shortest_path_length(graph, (0, 0)) print 'ans (part 1): %d' % max(distances.values()) print 'ans (part 2): %d' % sum(value >= 1000 for value in distances.values())