Advertisement
pierdziadek

Untitled

Mar 12th, 2025
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.79 KB | None | 0 0
  1. import math
  2.  
  3. plik = open("paris.txt", "r").read().split("\n")[1:]
  4.  
  5. class City:
  6.   id = ""
  7.   town = ""
  8.   population = 0
  9.   latitude = 0.0
  10.   longitude = 0.0
  11.  
  12.   def __init__(self, id, town, population, latitude, longitude):
  13.     self.id = id
  14.     self.town = town
  15.     self.population = int(population)
  16.     self.latitude = float(latitude)
  17.     self.longitude = float(longitude)
  18.  
  19.   def __str__(self):
  20.     return self.id
  21.  
  22.   def __repr__(self):
  23.       return self.id
  24.  
  25. cities = []
  26.  
  27. for i in range(len(plik)):
  28.   linia = plik[i].split(" ")
  29.   city = City(linia[0], linia[1], linia[2], linia[3], linia[4])
  30.   cities.append(city)
  31.  
  32. def pierwsze(N, obecna_permutacja, odpowiedz):
  33.   if len(obecna_permutacja) == N:
  34.     odpowiedz.append(obecna_permutacja)
  35.     return
  36.   for i in range(N):
  37.     nowe = cities[i]
  38.     if nowe not in obecna_permutacja:
  39.       pierwsze(N, obecna_permutacja + [nowe], odpowiedz)
  40.   return odpowiedz
  41.  
  42. def drugie(M, N, obecna_kombinacja, odpowiedz):
  43.   if len(obecna_kombinacja) == M:
  44.     odpowiedz.append(obecna_kombinacja)
  45.     return
  46.   for i in range(N):
  47.     nowe = cities[i]
  48.     drugie(M, N, obecna_kombinacja + [nowe], odpowiedz)
  49.   return odpowiedz
  50.  
  51. def podzbior(M, aktualny, pozostale, odpowiedz):
  52.   if len(aktualny) == M or not pozostale:
  53.     odpowiedz.append(aktualny)
  54.     return
  55.   podzbior(M, aktualny, pozostale[1:], odpowiedz)
  56.   podzbior(M, aktualny + [pozostale[0]], pozostale[1:], odpowiedz)
  57.   return odpowiedz
  58.  
  59. def odleglosc(miasto1: City, miasto2: City):
  60.   return math.sqrt(((miasto2.latitude - miasto1.latitude) ** 2) + ((miasto2.longitude - miasto1.longitude) ** 2))
  61.  
  62. def trzecie():
  63.   N = 5
  64.   permutacje = pierwsze(N, [], [])
  65.   odleglosci = []
  66.   for i in range(len(permutacje)):
  67.     obecna_permutacja = permutacje[i]
  68.     poprzednie_miasto = obecna_permutacja[0]
  69.     obecna_odleglosc = 0
  70.     for j in range(1, len(obecna_permutacja)):
  71.       obecna_odleglosc += odleglosc(poprzednie_miasto, obecna_permutacja[j])
  72.       poprzednie_miasto = obecna_permutacja[j]
  73.     obecna_odleglosc += odleglosc(obecna_permutacja[0], obecna_permutacja[len(obecna_permutacja) - 1])
  74.     odleglosci.append(obecna_odleglosc)
  75.   zlaczone = list(zip(permutacje, odleglosci))
  76.   zlaczone.sort(key=lambda x: x[1])
  77.   return zlaczone
  78.  
  79. def czwarte():
  80.   N = 5
  81.   podzbiory = podzbior(N, [], cities[:N], [])
  82.   laczna_suma_50 = sum(map(lambda x: x.population, cities[:N])) / 2
  83.   sumki = []
  84.   for obecny_podzbior in podzbiory:
  85.     sumka = sum(map(lambda x: x.population, obecny_podzbior)) - laczna_suma_50
  86.     sumki.append(sumka)
  87.   zlaczone = list(zip(podzbiory, sumki))
  88.   zlaczone.sort(key=lambda x: abs(x[1]))
  89.   return zlaczone
  90.    
  91.  
  92. print(pierwsze(3, [], []))
  93. print(drugie(3, 4, [], []))
  94. print(trzecie()[0])
  95. print(podzbior(3, [], cities[:3], []))
  96. print("sumki")
  97. print(czwarte())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement