Моя олимпиадная задача

Прочитал пост http://pikabu.ru/story/veselaya_zadachka_4534715 и вспомнил задачу, которую решал на  олимпиаде по информатике году эдак в 1991 - единственную, которая мне запомнилась из всех задач на всех олимпиадах, в которых я участвовал, из-за необычной подачи условия ))


Итак, если кому интересно.


В тыл врага на поверхность, представляющую собой идеальную бесконечную прямую, из самолёта были сброшены на парашютах два робота, несущих по половине ядерного заряда. Каждый робот оставляет в точке падения свой парашют и одновременно с другим роботом начинает работать по заложенной программе. Программа у каждого робота одинаковая. Цель у роботов - встретиться, чтобы заряд взорвался.


Программа записывается пронумерованными строками, как в бейсике, и может состоять из следующих команд:


1. Проверка условия "нашёл парашют" (если нашёл парашют, то...).

2. Шаг влево.

3. Шаг вправо.

4. Переход на строку программы №.


Собственно, нужно составить программу для роботов )

Моя олимпиадная задача Задача, Олимпиада, Роботы убийцы
Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

Я не программист. Но задача логическая. У ОБОИХ роботов одинаковая программа.

И нет команды, "если встретил робота,то...". То есть подрузумевается что когда роботы встретиться (а такой команды нету) то без команд после - вы "решили" задачу - так? То есть 2 робота встреяаются (в отсутствии команд "если встретил робота, то") и вы решили задачу? Тогда решение такое:

Робот появился на парашюте. Это значит решение вот такое:

1.Влево

2.Если нашел парашют, то влево (и так до бесконечности влево, т.к. мы появились на парашюте, и если слева от нас ещё парашют, то в той стороне робот, т.к. робот не может быть справа от своего (этого) парашюта, т.к. они бы встретились и мы уже решили задачу)

То есть если парашют найден мы пишем команду переноса на команду "влево", а дальше пишем условие если парашют найден слева (а он уже не будет найден т.к. их всего 2) пишем перенос на "влево, если найден то перенос на "влево"" - создаем бесконечный цикл за счёт того что парашют уже не будет найден и мы пересылаем на команду влево где опять проверяетс парашют и пересылает опять на влево и так бесконечно

3.Если парашют не найден переходит к этой команде: вправо, вправо

4.Если парашют найден то бесконечно вправо (по принципу из пункта 2), а если не найден то к пункту 5

5. "влево влево влево" и опять поиск парашюта если найден то по принципу из пункта 2, а если нет, то


то

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

то есть код будет бесконечным без этих циклов=



=код будет бесконечным, если будет писаться не в реальном времени, а если в реальном, то задача будет решена как только роботы встретятся.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку