◂ 9 décembre 2015 ▸
All in a Single Night :
- code.py
- optimisations
import itertools
def parse(filename):
f = open(filename, 'r')
linesOrig = list(map(str.strip, f.readlines()))
distances = {}
villes = []
for line in linesOrig:
tokens = line.split(' ')
cityFrom = tokens[0]
cityTo = tokens[2]
dist = int(tokens[4])
if not cityFrom in villes:
distances[cityFrom] = {}
villes.append(cityFrom)
if not cityTo in villes:
distances[cityTo] = {}
villes.append(cityTo)
distances[cityFrom][cityTo] = dist
distances[cityTo][cityFrom] = dist
return distances, villes
def gras(s):
# codes pour le terminal
return '\x1b[1m' + s + '\x1b[0m'
def calcDist(villes, distances):
d = sum([distances[villes[i-1]][villes[i]] for i in range(1, len(villes))])
return d
distances, villes = parse('input.txt')
print(gras("Villes:"), villes)
#print(gras("Distances:"), distances)
minDist = None
minParcours = None
maxDist = None
maxParcours = None
for parcours in itertools.permutations(villes):
# parcourir les A -> ... -> B et pas les B -> ... -> A symétriques
if parcours[0] > parcours[-1]:
continue
d = calcDist(parcours, distances)
if minDist == None or d < minDist:
minDist = d
minParcours = parcours
if maxDist == None or d > maxDist:
maxDist = d
maxParcours = parcours
print(gras("Dist minimale:"), minDist, "pour", minParcours)
print(gras("Dist maximale:"), maxDist, "pour", maxParcours)