# Считываем известные точки, и точки для которых нужно найти ответ 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/