I had a spare fifteen minutes and decided that I should tidy up my monorepo. The work of tidying up is not finished; this is a small step in the right direction. TL;DR - Created a tools directory - Created a scratch directory (see README.md for more information) - Added README.md to third_party - Renamed delete_dotfile_symlinks -> symlinkManager - Packaged symlinkManager as an executable symlink-mgr using buildGo
		
			
				
	
	
		
			48 lines
		
	
	
	
		
			999 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			999 B
		
	
	
	
		
			Python
		
	
	
	
	
	
| from collections import deque
 | |
| from heapq import heappush, heappop
 | |
| from fixtures import weighted_graph
 | |
| 
 | |
| 
 | |
| def put(t, x, xs):
 | |
|     if t == 'stack':
 | |
|         return xs.append(x)
 | |
|     if t == 'queue':
 | |
|         return xs.append(x)
 | |
|     if t == 'priority':
 | |
|         return heappush(xs, x)
 | |
| 
 | |
| 
 | |
| def pop(t, xs):
 | |
|     if t == 'stack':
 | |
|         return xs.pop()
 | |
|     if t == 'queue':
 | |
|         return xs.popleft()
 | |
|     if t == 'priority':
 | |
|         return heappop(xs)
 | |
| 
 | |
| 
 | |
| # shortest_path :: Vertex -> Vertex -> Graph -> [Vertex]
 | |
| def shortest_path(a, b, g):
 | |
|     """Returns the shortest path from vertex a to vertex b in graph g."""
 | |
|     t = 'priority'
 | |
|     xs = []
 | |
|     seen = set()
 | |
|     # Map(Weight, [Vertex])
 | |
|     m = {}
 | |
| 
 | |
|     put(t, (0, [a], a), xs)
 | |
| 
 | |
|     while xs:
 | |
|         w0, path, v = pop(t, xs)
 | |
| 
 | |
|         seen.add(v)
 | |
|         if v == b:
 | |
|             m[w0] = path
 | |
|         for w1, x in g.get(v):
 | |
|             if x not in seen:
 | |
|                 put(t, (w0 + w1, path + [x], x), xs)
 | |
| 
 | |
|     return m
 | |
| 
 | |
| 
 | |
| print(shortest_path('a', 'f', graph_a))
 |