From ef9a185e205311af4907ebe992aad6730de6935c Mon Sep 17 00:00:00 2001 From: vlad Date: Tue, 1 Feb 2022 04:51:45 +0500 Subject: [PATCH] =?UTF-8?q?done=20homework=20=D0=90=D0=BB=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D1=82=D0=BC=20=D0=B4=D0=B5=D0=B9=D0=BA=D1=81=D1=82?= =?UTF-8?q?=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Solution/short _cut.py | 72 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Solution/short _cut.py diff --git a/Solution/short _cut.py b/Solution/short _cut.py new file mode 100644 index 0000000..e4d3734 --- /dev/null +++ b/Solution/short _cut.py @@ -0,0 +1,72 @@ + + +branch = { + + 'Ул. Бейкер стрит, 221б': (5, 2), + 'Почтовое отделение': (0, 2), + 'Ул. Грибоедова, 104/25 ': (2, 5), + 'Ул. Большая Садовая, 302-бис': (6, 6), + 'Вечнозелёная Аллея, 742': (8, 3) +} + + +def distance(start, point2): + ''' + + :param start: НАЧАЛЬНАЯ ТОЧКА + :param point2: КОНЕЧНАЯ ТОЧКА + :return: float + ''' + return ((point2[0] - start[0]) ** 2 + (point2[1] - start[1]) ** 2) ** 0.5 + + +def short_cut(branch_d): + ''' + + :param branch_d: Получаем словарь + :return: возвращаем список. Координаты точек, следующие друг за другом + ''' + point1 = branch_d.pop('Почтовое отделение') # Определяем начальные координаты забирая со словаря + s_c = [point1, '->'] # Готовим выходной список с начальной точкой + start = point1 # start будем менять + + for i in range(len(branch_d)): + cut = [] #Промежуточный список для поиска ближней точки + + for key, point2 in branch_d.items(): + + res = distance(start=start, point2=point2) + if not cut: + cut = [key, point2, [res]] + elif res < cut[2][0]: + cut = [key, point2, [res]] + + if i >= 1: + path_sum = s_c[-2][0] + cut[2][0] + + s_c.append(cut[1]) + + s_c.append([path_sum]) + s_c.append('->') + else: + s_c.append(cut[1]) + + s_c.append(cut[2]) + s_c.append('->') + + start = cut[1] + if len(branch_d) != 1: + branch_d.pop(cut[0]) + else: + comeback = distance(start=cut[1], point2=point1) + path_sum = s_c[-2][0] + comeback + + s_c.append(point1) + s_c.append([path_sum]) + s_c.append('=') + s_c.append([path_sum]) + + return s_c + + +print(' '.join(map(str, short_cut(branch))))