Группа исследователей собирается высадиться на остров невероятно ровной формы, но разведка при помощи спутника выяснила, что на острове есть зона зыбучих песков.
Для повышения безопасности экспедиции было решено разработать систему оповещения, которая предупредит исследователей об опасности. А для снижения расходов на производство было решено заказать программное обеспечение.
Напишите программу, которая по координатам исследователя, будет сообщать о безопасности в этой точке.
Формат ввода
Два рациональных числа — координаты исследователя.
Формат вывода:
Одно из сообщений:
- Опасность! Покиньте зону как можно скорее!
- Зона безопасна. Продолжайте работу.
- Вы вышли в море и рискуете быть съеденным акулой!
Пример
Ввод
3.5
-3.2
Вывод
Опасность! Покиньте зону как можно скорее!
Ввод
-5.2
3.4
Вывод
Зона безопасна. Продолжайте работу.
Решение
Задача скорее на школьный курс математики, чем на программирование.
Первым делом нам надо убедиться, что мы находимся в зеленой зоне (проверка принадлежности координат кругу).
Далее решение разбивается на 3 части – по одной для каждого сектора координатной сетки в верхней половине и одна общая для нижней половины:
- x > 0 и y > 0
проверка принадлежности точки окружности с радиусом 5 - x < 0 и y > 0
два диапазона – проверка принадлежности точки квадрату с координатами (-4, 5) (0, 0) или прямоугольному треугольнику чей катет описан уравнением 5x – 3y == -35, примыкаюшему слева к квадрату - проверка принадлежности точки зоне описаной параболой с формулой 0.25x2 + 0.5x – 9
Посмотреть код
Решение
x = float(input())
y = float(input())
if (x ** 2 + y ** 2) ** 0.5 > 10:
print('Вы вышли в море и рискуете быть съеденным акулой!')
elif x >= 0 and y >= 0 and (x ** 2 + y ** 2) ** 0.5 <= 5:
print('Опасность! Покиньте зону как можно скорее!')
elif -4 <= x < 0 and 0 <= y <= 5:
print('Опасность! Покиньте зону как можно скорее!')
elif -7 <= x < -4 and 0 <= y <= 5 and (5 * x - 3 * y) > -35:
print('Опасность! Покиньте зону как можно скорее!')
elif (0.25 * x ** 2 + 0.5 * x - 9) <= y <= 0:
print('Опасность! Покиньте зону как можно скорее!')
else:
print('Зона безопасна. Продолжайте работу.')
В последнем условии ошибка. коэффициентом с для параболы является -8,75. Это легко проверить подставив х = 0. Тогда y=c и он больше -9.
Охотно допускаю. В свое время было много споров относительно коэффициентов этой параболы.
Так как нарисована она достаточно грубо, а размер одного квадратика 0.4×0.4 вычислить точные значения довольно затруднительно.
К счастью задача порыта тестами так, что допускает довольно широкие трактования коэффициентов именно этой параболы.
На мой вкус нижняя точка параболы ровно посередине между 8 и 10, а это значит коэффициент равен 9.
Можете пожалуйста объяснить, как получилось такое уравнения для треугольника? Немного не ясно просто)
Это Вам надо вернуться в геометрию, в тему прямые.
В общем случае прямая записывается в виде x / a + y / b = 1, где a и b это координаты точек осей X и Y где прямая с ними пересекается.
А дальше путем применения знаний из алгебры можно привести уравнение уже к тому виду, что показано выше.
Есть формулы вычисления уравнения прямой и по произвольным двум точкам. Они используют тот факт, что угловой коэффициент не зависит от размера “треугольника” образованного прямой на нужных нам отрезках и такой треугольник легко может быть масштабирован до ситуации описанной ранее. В любом случае это довольно большой кусок вычислений, чтобы приводить их здесь полностью.
На самом деле это одна из самых “неправильных” задач хендбука с той точки зрения, что для ее решения приходится вспоминать или изучать школьный курс геометрии и алгебры.
Вторая подобная задача про котлеты.