Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- A, B = 15, 165
- N_1 = 37, 68
- N_2 = 52, 74
- N_3 = 118, 146
- N_4 = 35, 44
- N_5 = 37, 65
- N_6 = 46, 74
- data = [N_1, N_2, N_3, N_4, N_5, N_6]
- def get_free_length(a, b, data=None):
- # Для ручного воода
- if not data:
- data = []
- n = int(input('number of lines: '))
- for _ in range(n):
- data.append(tuple(map(int, input('line ("," - splitter): ').split(','))))
- # "разворачиваем" основной отрезок вправо
- if a > b:
- a, b = b, a
- # "разворачиваем" все дополнительные отрезки вправо
- data = list(map(lambda x: (x[0], x[1]) if x[0] < x[1] else (x[1], x[0]), data))
- sorted_data = sorted(data)
- free_length = 0
- # самое маленькое начало из вспомогательных отрезков
- min_start = sorted_data[0][0]
- # самое большое окончание из вспомогательных отрезков
- max_end = max([i[1] for i in sorted_data])
- # проверяем, что есть наложения вспомогательных отрезков на основной
- if b <= min_start or a >= max_end:
- free_length = b - a
- else:
- # проверяем наложение в начале и в конце отрезка
- if min_start > a:
- free_length += min_start - a
- if max_end < b:
- free_length += b - max_end
- # значение текущего максимального конца отрезка
- current_max_end = sorted_data[0][1]
- # сравниваем значение текущего максимального конца отрезка со следующим отрезком
- for i in range(len(sorted_data) - 1):
- if current_max_end < sorted_data[i + 1][0]:
- free_length += sorted_data[i + 1][0] - current_max_end
- if current_max_end < sorted_data[i + 1][1]:
- current_max_end = sorted_data[i + 1][1]
- return free_length
- print(get_free_length(a=A, b=B, data=data))
- print(get_free_length(a=B, b=A, data=data))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement