Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 15, 2016 01:59:24

Arveske
Зарегистрирован: 2016-09-15
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Задание в универе, не могу понять, что делать

Дана прямая с начальной точкой “О”. Два зайца начинают одновременно двигать по этой прямой в сторону от этой точки. Стартовали они на разном расстоянии от
точки О.
Нужно составить функцию на языке программирования 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

Офлайн

#2 Сен. 15, 2016 05:39:40

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Задание в универе, не могу понять, что делать

Вот написал решение, хотя сначала подумывал как-то математически решить. Но скорее задание предполагает программную реализацию?!:

 #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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version