@dmitry-toster

Как решить такую задачу на логику?

С детства ненавижу детские загадки и вопросы на логику, ответы на которые может быть несчетное количество, ограниченное лишь собственным воображением.
Тем не менее надо как-то решать...

Задача:
В депо стоят 2 поезда. Ими можно управлять командами Right, Left и Speed + все доступные мат. операторы.
За этими поездами прилетели 2 вертолета. Они их прицепили и сбросили на рельсы случайным образом. Расстояние между поездами неизвестно.
Задача: написать код так, чтобы поезда встретились независимо от того, как их сбросили вертолеты.
Дополнение: рельсы одни и они прямые, т.е поезда не могут ездить по кругу, только вперед-назад.

Оригинал текста на английском

There are 2 trains in the factory. You can program them with the following commands: Right, Left and Speed. Plus all the available math commands and programming language operators. 2 helicopters are coming to pick up those trains to throw them to the rails. They drop the trains randomly to the rails. The distance is finite. Your goal is to program the trains so they meet regardless of how the helicopters drop them.

Как я размышляю...
В каком направлении и с какой скоростью будет ехать первый поезд, а какой второй - неизвестно.
Поэтому, чтобы увеличить вероятность их столкновения, было бы логично, чтобы какой-то один поезд стоял на месте и никуда не ехал.
Остается второй поезд, которому надо ехать либо влево, либо вправо.
Если я мыслю правильно, тогда первый вопрос: как, собственно, узнать в какую сторону ему ехать?
И второй: при чем тут скорость?

Код писать буду на JS, но сперва надо решить это человеческим языком...
  • Вопрос задан
  • 312 просмотров
Решения вопроса 4
sergiks
@sergiks Куратор тега Алгоритмы
♬♬
Один пускай стоит, а второй туда-сюда с возрастающей амплитудой

spoiler
Похожая задача на англ.: Two robot with parachute in a line
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Один поезд начинает движение влево, второй вправо, какой именно куда - неважно. Если не встретились, то через время t меняют направление движения. Потом через время 2t, 3t, 4t и т.д. Как вариант t, 2t, 4t, 8t.
Ответ написан
profesor08
@profesor08
В общем пусть едут в любую сторону какое-то расстояние, если не встретились, разворачивай на 180, и пусть едут в два раза дольше, так повторяй до победного. Важно чтоб после поворота, поезда проезжали большее расстояние, иначе есть шанс что никогда не встретятся.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Элементарно.

Обозначим поезда A,B. Обозначим управление например поездом A, так Left(A,x) - ехать влево на x единиц расстояния (это берется из возможности управления скоростью и контроля временем). Тогда заставим
поезд A ехать туда сюда с амплитудой которая увеличивается. И в каждой крайней точке амплитуды
- переключаться на поезд B и делать те-же манипуляции.

Left(A,1), Left(B,1)
Right(A,2), Right(B,2)
Left(A,3), Left(B, 3)....

Они гарантировано встретятся.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы