Tidy up structure of briefcase
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
This commit is contained in:
		
							parent
							
								
									5ec5a6da8c
								
							
						
					
					
						commit
						fabf1c9334
					
				
					 89 changed files with 53 additions and 41 deletions
				
			
		|  | @ -0,0 +1,94 @@ | |||
| from heapq import heappush, heappop | ||||
| from collections import deque | ||||
| from fixtures import weighted_graph, expanded_weights_graph | ||||
| 
 | ||||
| # UnweightedGraph(a) :: Map(a, Set(a)) | ||||
| # WeightedGraph(a) :: Map(a, Set(a)) | ||||
| 
 | ||||
| 
 | ||||
| # shortest_path_dijkstra :: Vertex -> Vertex -> WeightedGraph(Vertex) | ||||
| def shortest_path_dijkstra(a, b, g): | ||||
|     q = [] | ||||
|     seen = set() | ||||
| 
 | ||||
|     heappush(q, (0, a, [a])) | ||||
| 
 | ||||
|     while q: | ||||
|         w0, v0, path = heappop(q) | ||||
|         if v0 in seen: | ||||
|             continue | ||||
|         elif v0 == b: | ||||
|             return w0, path | ||||
|         for w1, v1 in g.get(v0): | ||||
|             heappush(q, (w0 + w1, v1, path + [v1])) | ||||
|         seen.add(v0) | ||||
|     return 'weighted', 'pizza' | ||||
| 
 | ||||
| 
 | ||||
| # expand_edge :: Vertex -> (Weight, Vertex) -> Map(Vertex, [Vertex]) | ||||
| def expand_edge(v0, wv): | ||||
|     w, v1 = wv | ||||
|     assert w > 1 | ||||
| 
 | ||||
|     result = {v0: ['{}-{}'.format(v1, 1)]} | ||||
|     for x in range(w - 2): | ||||
|         result['{}-{}'.format(v1, x + 1)] = ['{}-{}'.format(v1, x + 2)] | ||||
|     result['{}-{}'.format(v1, w - 1)] = [v1] | ||||
| 
 | ||||
|     return result | ||||
| 
 | ||||
| 
 | ||||
| # expand_weights :: Vertex -> WeightedGraph(Vertex) -> UnweightedGraph(Vertex) | ||||
| def expand_weights(v, g): | ||||
|     result = {} | ||||
|     q = deque() | ||||
|     seen = set() | ||||
| 
 | ||||
|     q.append(v) | ||||
|     while q: | ||||
|         v = d.popleft() | ||||
|         if v in seen: | ||||
|             continue | ||||
|         x = expand_edge(v, g.get) | ||||
|         for w, v1 in g.get(v): | ||||
|             if w > 1: | ||||
|                 ws = expand_edge(v, (w, v1)) | ||||
|                 result = {**result, **ws} | ||||
|             q.append(v) | ||||
|         pass | ||||
| 
 | ||||
| 
 | ||||
| # shortest_path_inject :: Vertex -> Vertex -> WeightedGraph(Vertex) | ||||
| def shortest_path_inject(a, b, g): | ||||
|     q = deque() | ||||
|     seen = set() | ||||
| 
 | ||||
|     q.append((a, [a])) | ||||
| 
 | ||||
|     while q: | ||||
|         v0, path = q.popleft() | ||||
|         if v0 == 'dummy': | ||||
|             continue | ||||
|         elif v0 in seen: | ||||
|             continue | ||||
|         elif v0 == b: | ||||
|             return len(path), path | ||||
|         for _, v1 in g.get(v0): | ||||
|             q.append((v1, path + [v1])) | ||||
|         seen.add(v0) | ||||
|         continue | ||||
| 
 | ||||
|     return None, None | ||||
| 
 | ||||
| 
 | ||||
| print(expand_edge('a', (4, 'b'))) | ||||
| print(expand_edge('a', (5, 'e'))) | ||||
| assert expand_weights('a', weighted_graph) == expanded_weights_graph | ||||
| # a = 'a' | ||||
| # b = 'd' | ||||
| # w, x = shortest_path_dijkstra(a, b, weighted_graph) | ||||
| # w1, x1 = shortest_path_inject(a, b, weighted_graph) | ||||
| # print("[dijkstra]  Shortest path from {} to {} is {} with weight {}".format( | ||||
| #     a, b, x, w)) | ||||
| # print("[injection] Shortest path from {} to {} is {} with weight {}".format( | ||||
| #     a, b, x1, w1)) | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue