Подтвердить что ты не робот

Программирование двух поездов для пересечения без позиционных данных или связи (логическая головоломка)

Вертолет бросает два поезда, каждый на парашюте, на прямую бесконечную железнодорожную линию.

Между этими двумя поездами существует расстояние undefined.

Каждый имеет одно и то же направление, и при посадке парашют, прикрепленный к каждому поезду, падает на землю рядом с поездом и отделяется.

Каждый поезд имеет микрочип, который контролирует его движение. Чипы идентичны.

Поезда не могут знать, где они находятся.

Вам нужно написать код в чипе, чтобы заставить поезда натыкаться друг на друга.

В каждой строке кода выполняется один такт.

Вы можете использовать следующие команды (и только они):

  • MF - перемещает поезд вперед.
  • MB - перемещает поезд назад
  • IF (P) - условие, которое выполняется, если поезд находится рядом с парашютом. В этом случае IF не указывается.
  • GOTO
4b9b3361

Ответ 1

Сделайте каждый поезд медленным движением, пока он не найдет парашют. Когда задний поезд найдет парашют переднего поезда, заставьте его двигаться вперед быстрее, чтобы догнать передний поезд.

1.  MF
2.  IF(P)
3.    GOTO 5
4.  GOTO 1
5.  MF
6.  GOTO 5

Если вы хотите сделать меньше времени для поездов, чтобы достичь друг друга, за счет некоторых дополнительных строк кода вы можете развернуть второй цикл.

Ответ 2

label1: MF
If (P)
{
   // Do nothing (because of no then?)
}
ELSE
{
   MF;
   MB;
   GOTO label1;
}
label 2:MF
GOTO label2;

Идите вперед 2 раза, назад 1 раз, пока не встретитесь с другим парашютом поезда, идите вперед, как сумасшедший (чтобы натолкнуться на другого - он все же вперед, а затем назад - это означает, что он идет медленнее). Я использую MF один раз в метке 2, означаю, что для перехода на один шаг вперед требуется 2 такта. В label1 потребовалось 5 тактов, чтобы идти вперед на один шаг. Поэтому, если мы используем больше MF в label2, два из них будут быстрее сталкиваться друг с другом.
Не используется переменная.