74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
#!/bin/python3
|
|
import sys,time,re,json
|
|
from pprint import pprint
|
|
|
|
sys.path.insert(0, '../../')
|
|
from fred import list2int,get_re,nprint,lprint,loadFile,dprint,TSP
|
|
start_time = time.time()
|
|
|
|
input_f = 'input'
|
|
|
|
part = 2
|
|
#########################################
|
|
# #
|
|
# Part 1 #
|
|
# #
|
|
#########################################
|
|
|
|
def constructGraph(input_f):
|
|
"""
|
|
The graph of cities should look something like this
|
|
|
|
graph = {
|
|
"node": [("dist1", distance1), ("dist", distance2)],
|
|
}
|
|
"""
|
|
inst = []
|
|
graph = {}
|
|
with open(input_f) as file:
|
|
for line in file:
|
|
inst = line.rstrip().split(' = ')
|
|
inst = inst[0].split(' to ') + [int(inst[1])]
|
|
if inst[0] not in graph:
|
|
graph[inst[0]] = []
|
|
if inst[1] not in graph:
|
|
graph[inst[1]] = []
|
|
graph[inst[0]].append((inst[1],inst[2]))
|
|
graph[inst[1]].append((inst[0],inst[2]))
|
|
|
|
return graph
|
|
|
|
if part == 1:
|
|
graph = constructGraph(input_f)
|
|
shortest = float('inf')
|
|
routes = []
|
|
cities = set(graph.keys())
|
|
for neighbors in graph.values():
|
|
for neighbor, _ in neighbors:
|
|
cities.add(neighbor)
|
|
for c in cities:
|
|
print(TSP(graph, c))
|
|
shortest = min(shortest,TSP(graph, c)[1])
|
|
|
|
print(shortest)
|
|
|
|
#########################################
|
|
# #
|
|
# Part 2 #
|
|
# #
|
|
#########################################
|
|
if part == 2:
|
|
graph = constructGraph(input_f)
|
|
#print(graph)
|
|
longest = 0
|
|
routes = []
|
|
cities = set(graph.keys())
|
|
for neighbors in graph.values():
|
|
for neighbor, _ in neighbors:
|
|
cities.add(neighbor)
|
|
for c in cities:
|
|
longest = max(longest,TSP(graph, c,'longest')[1])
|
|
|
|
print(longest)
|
|
|
|
print("--- %s seconds ---" % (time.time() - start_time)) |