1) Где находится кролик в момент времени t=0.5 с? На нулевой кочке, на промежуточной кочке, или «нигде» (в воздухе)?
2) Т.е. никаких ограничений на мое движение нет?
нет ограничения на количество клеток в вашем прыжке, (хм надо было в клетках формулировать)
но я затрудняюсь понять почему вы уверены, что рано или поздно вы встретитесь с кроликом.
хм, мы движемся быстрее кролика, на одну клетку. То есть если направление совпадает, то рано или поздно мы его догоним.
Дальше, из-за того что мы довольно резко увеличиаем количество шагов в одну сторону, то они компенсируют и предыдущие шаги (N*S ) и шаги кролика (17*N)
Я правда выбрал довольно маленькое увелечие N ( N = N*N )
Но если взять, скажем, N = N*N*N, то N*N*N>N*S + 17*N и следовательно в тот момент, когда выполнится
N*N*N>N*S + 17*N + D, где D — расстояние от исходной точки до кролика, на этом этапе кролик будет догнан.
я понимаю вашу логику, но почему-то у меня есть сомнения, тк кролик может проскакивавать между вашими прыжками по 18. ктому же N растет в квадрате (кубе). я даже скрипт написал с вашим алго. но с 1000 влево он не поймал (это конечно же ни чего не доказывает).
Вобщем я опубликовал тн «правильное» решение — взгляните.
Допустим мы знаем начальную точку кролика K0. Тогда в каждый момент времени t кролик находится либо в K0+17t либо в K0-17t
Теперь перебираем все K0 пока не найдем кролика.
Пусть мы находимся в точке 0. Тогда прыжки будут такие
-1+17 -1-34
1+51 1-68
-2+85 -2-102
2+119 2-136
…
-i+(i*4-3)*17 -i-(i*4-2)*17
i+(i*4-1)*17 i-(i*4)*17
…
i и -i это как раз те K0, которые мы перебираем, а остальное это смещение кролика относительно начальной точки за время наших предыдущих прыжков :)
Ну и объяснение:
изначально кролик находиться от нас на расстоянии x.
и движеться либо вправо d=+1 либо влево d=-1
функция передвижения кролика f_rab(t) = x + t*17*d;
мы просто поддерживаем исходное рассояние от нас для двух случаев
s=
# в право 17*t
# в лево -17*t
и для каждого случая сокращаем исходное расстояние:
# кролик был слева: s — t
# кролик был справа: s + t
таким образом наша функция выглядит следующим образом:
f(t) = switch( t % 4) {
case 0: return 17*t — t
case 1: return 17*t + t
case 2: return -17*t — t
case 3: return -17*t + t
}
Поймать кролика