Форум сайта python.su
0
Дана прямая с начальной точкой “О”. Два зайца начинают одновременно двигать по этой прямой в сторону от этой точки. Стартовали они на разном расстоянии от
точки О.
Нужно составить функцию на языке программирования Python, которая покажет, на каком расстоянии от точки O зайцы встретятся.
Условия
Есть величины:
- начальная позиция (несколько единиц) от точки О
- длина прыжка (несколько единиц) преодолеваемая за один прыжок
- продолжительность отдыха - после каждого прыжка заец должен отдохнуть. Показывает, как долго (сколько единиц времени) заяц будет отдыхать между двумя прыжками. Сам прыжок длится 0 единиц.
Известно что все величины это целые числы:
- позиция >= 0
- длина прыжка >= 0
- продолжительность отдыха >= 1
Нужно написать функцию, которая использует использует все названные величины для обоиз зайцев и может показыть
- -1 если зайцы никогда не встретятся
- позицию, где они встретятся впервый раз. Встреча проходит на земле.(в момент начала или конца отдыха)
Декларация функции:
def meet_me(pos1, jump_distance1, sleep1, pos2, jump_distance2, sleep2)
Примеры:
meet_me(1, 2, 1, 2, 1, 1) => 3
meet_me(1, 2, 3, 4, 5, 5) => -1
meet_me(10, 7, 7, 5, 8, 6) => 45
meet_me(100, 7, 4, 300, 8, 6) => 940
meet_me(1, 7, 1, 15, 5, 1) => 50
Офлайн
35
Вот написал решение, хотя сначала подумывал как-то математически решить. Но скорее задание предполагает программную реализацию?!:
#coding: utf-8 def meet_me(p1, l1, t1, p2, l2, t2): if p1 == p2: return p1 _p1 = min(p1, p2) if _p1 == p1: _p1, _l1, _t1 = p1, l1, t1 _p2, _l2, _t2 = p2, l2, t2 else: _p1, _l1, _t1 = p2, l2, t2 _p2, _l2, _t2 = p1, l1, t1 if 2.0 * _l1 * _t2 <= 2.0 *_l2 * _t1: return -1 # Один никогда не догонит другого, скорости не хватит # Симулируем гонки (t - просто для красоты) t = 0 wt1 = 0 wt2 = 0 while True: if _p1 == _p2: return _p1 if wt1 == 0: wt1 = _t1 _p1 += _l1 if wt2 == 0: wt2 = _t2 _p2 += _l2 wt1 -= 1 wt2 -= 1 t += 1 print meet_me(1, 7, 1, 15, 5, 1) print meet_me(100, 7, 4, 300, 8, 6) print meet_me(1, 2, 3, 4, 5, 5) # еще интересно # рассмотреть для этих целей систему SimPy (simpy.readthedocs.org) - # удобная система для моделирования процессов дискретного времени.
Отредактировано scidam (Сен. 15, 2016 05:59:48)
Офлайн