Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Считываем известные точки, и точки для которых нужно найти ответ
- dots, questions = eval(input())
- # Создаём массив ответов
- ans = []
- # для каждого вопроса...
- for q in questions:
- # Считаем расстояние до каждой из известных точек, и сохраняем в формате (x, y, distance)
- data = [(x, y, abs(x - q)) for x, y in dots]
- # Сортируем их по расстоянию, по умолчанию в начале окажутся точки с меньшим расстоянием
- sorted_data = sorted(data, key=lambda x: x[2])
- # Мы не можем быть уверенны что две ближайшие точки не лежат с одной стороны
- # поэтому нам надо найти ближайшии с разных сторон
- # Находим точку справа:
- right_i = 0
- # Проверяем, если точка лежит слева от вопроса, пробуем следующию, и так пока не окажется справа
- # Таким образом получаем ближайшую точку справа
- while sorted_data[right_i][0] < q:
- right_i += 1
- # Всё то-же самое, только слева
- left_i = 0
- while sorted_data[left_i][0] > q:
- left_i += 1
- # Достаём наши точки, расстояние нам больше не надо, так-что выкидываем
- right_x, right_y, _ = sorted_data[right_i]
- left_x, left_y, _ = sorted_data[left_i]
- # Чистая математика
- dx = right_x - left_x
- dy = right_y - left_y
- k = dy / dx
- b = left_y - (k * left_x)
- # Добавляем ответ в массив
- ans.append((k * q) + b)
- # Выводим наши ответы
- print(ans)
- Шутка на тему:
- https://xkcd.com/605/
Advertisement
Add Comment
Please, Sign In to add comment