first commit
This commit is contained in:
61
09/part1.py
Normal file
61
09/part1.py
Normal file
@ -0,0 +1,61 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import re
|
||||
|
||||
RE_DISTANCE = re.compile(r'^(.*) to (.*) = (\d+)$')
|
||||
|
||||
|
||||
class Town:
|
||||
|
||||
def __init__(self, name):
|
||||
self.name = name
|
||||
self.distance = dict()
|
||||
|
||||
def addDistance(self, town, distance):
|
||||
self.distance[town] = distance
|
||||
|
||||
|
||||
def read_file(filename):
|
||||
file = open(filename, 'r')
|
||||
while True:
|
||||
line = file.readline()
|
||||
if not line:
|
||||
break
|
||||
yield line
|
||||
|
||||
|
||||
def computePossiblePaths(town, neighbours, maxTowns, visited, journey):
|
||||
visited.append(town)
|
||||
if len(visited) == maxTowns:
|
||||
print "%010d %s" % (journey, ",".join(visited))
|
||||
visited.pop()
|
||||
return
|
||||
for nei in neighbours[town].distance.keys():
|
||||
if nei in visited:
|
||||
continue
|
||||
distance = neighbours[town].distance[nei]
|
||||
journey += distance
|
||||
computePossiblePaths(nei, neighbours, maxTowns, visited, journey)
|
||||
journey -= distance
|
||||
visited.pop()
|
||||
|
||||
|
||||
def main():
|
||||
towns = dict()
|
||||
for line in read_file('input'):
|
||||
match = re.search(RE_DISTANCE, line)
|
||||
if not match:
|
||||
print "wrong operation syntax"
|
||||
if match.group(1) not in towns:
|
||||
towns[match.group(1)] = Town(match.group(1))
|
||||
if match.group(2) not in towns:
|
||||
towns[match.group(2)] = Town(match.group(2))
|
||||
towns[match.group(1)].addDistance(match.group(2), int(match.group(3)))
|
||||
towns[match.group(2)].addDistance(match.group(1), int(match.group(3)))
|
||||
|
||||
for town in towns.keys():
|
||||
print "Starting point: %s" % (town)
|
||||
computePossiblePaths(town, towns, len(towns.keys()), [], 0)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user