Advertisement
Guest User

Untitled

a guest
Jun 29th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.86 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. def distance(x1, y1, x2, y2):
  4.     dist = abs(x1 - x2) + abs(y1 - y2)
  5.     if x1 == x2 or y1 == y2:
  6.         dist = dist -1
  7.     return dist
  8.  
  9. class City:
  10.     def __init__(self, x, y, name):
  11.         self._x = x
  12.         self._y = y
  13.         self._name = name
  14.         self._traderoutes = []
  15.    
  16.     def getX(self):
  17.         return self._x
  18.  
  19.     def getY(self):
  20.         return self._y
  21.  
  22.     def getName(self):
  23.         return self._name
  24.  
  25.     def addTraderoute(self, route):
  26.         self._traderoutes.append(route)
  27.  
  28.     def getNumberOfTraderoutes(self):
  29.         return len(self._traderoutes)
  30.  
  31.     def getDistanceTo(self, city):
  32.         return distance(self.getX(), self.getY(), city.getX(), city.getY())
  33.  
  34. class Traderoute:
  35.     def __init__(self, city1, city2):
  36.         self._city1 = self._city1
  37.         self._city2 = self._city2
  38.         self._distance = city1.getDistanceTo(ciyt2)
  39.         city1.addTraderoute(self)
  40.         city2.addTraderoute(self)
  41.  
  42.     def getCity1(self):
  43.         return self._city1
  44.  
  45.     def getCity2(self):
  46.         return self._city2
  47.  
  48.     def getDistance(self):
  49.         return self._distance
  50.  
  51. class TraderouteGenerator:
  52.     def __init__(self):
  53.         self._cities = []
  54.  
  55.     def addCity(self, city):
  56.         self._cities.append(city)
  57.  
  58.     def getNextCity(self, currentCity):
  59.         bestCityIndex = -1
  60.         bestDistance = -1
  61.  
  62.         for i in range(len(self._cities)):
  63.             dist = currentCity.getDistanceTo(self._cities[i])
  64.             if dist > bestDistance:
  65.                 bestCityIndex = i
  66.             bestDistance = dist
  67.  
  68.         if bestDistance < 8:
  69.             return False
  70.         else:
  71.             return self._cities.pop(i)
  72.  
  73.     def calculate(self):
  74.         stop = False
  75.         routes = []
  76.  
  77.         while not stop:
  78.             currentCity = self._cities.pop()
  79.             nextCity = self.getNextCity(currentCity)
  80.             if nextCity:
  81.                 routes.append(Traderoute(currentCity, nextCity))
  82.                 if not currentCity.getNumberOfTraderoutes() == 4:
  83.                     self._cities.append(currentCity)
  84.                 if not nextCity.getNumberOfTraderoutes() == 4:
  85.                     self._cities.append(nextCity)
  86.             else:
  87.                 stop = True
  88.         return routes
  89.  
  90. generator = TraderouteGenerator()
  91. generator.addCity(City(30, 18, "a1"))
  92. generator.addCity(City(34, 20, "a2"))
  93. generator.addCity(City(36, 15, "a3"))
  94. generator.addCity(City(41, 16, "a4"))
  95. generator.addCity(City(39, 13, "a5"))
  96. generator.addCity(City(30, 14, "a6"))
  97. generator.addCity(City(27, 12, "a7"))
  98. generator.addCity(City(30, 10, "a8"))
  99. generator.addCity(City(32, 8, "a9"))
  100. generator.addCity(City(35, 8, "a10"))
  101. generator.addCity(City(38, 10, "a11"))
  102. routes = generator.calculate()
  103.  
  104. for route in routes:
  105.     print(route.getCity1().getName + " <--> " + route.getCity2())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement