theJam.ru

Логические задачиРоботы

24 декабря 2008 | Добавил: aleg940

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

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

[<метка>:] Left
[<метка>:] Right
[<метка>:] GoTo <метка>
[<метка>:] PGoTo <метка>

При исполнении оператора Left робот делает один шаг влево, то есть перепрыгивает на точку с числом на единицу меньшим, а при исполнении оператора Right - шаг вправо. Оператор GoTo - обычный оператор безусловного перехода на указанную метку в программе. Оператор PGoTo - оператор условного перехода, где условием является наличие парашюта в той точке, на которой стоит робот (все равно - своего парашюта или чужого).

Итак, роботы приземляются, бросают парашюты и в один и тот же момент начинают действовать по заложенным в них программам. Причем действуют они синхронно. Давайте будем считать, что каждую секунду роботы одновременно исполняют очередной оператор своей программы (на исполнение операторов GoTo и PGoTo тоже требуется одна секунда).

Теперь представьте себе, что программы у роботов совершенно одинаковые. Тогда они и вести себя будут совершенно одинаково, весело прыгая по точкам и не мешая друг другу. Правда? Ничего подобного! Оказывается, можно написать такую программу, при исполнении которой роботы обязательно встретятся, то есть в какой-то момент прыгнут в одну и ту же точку!

Именно такую программу вам и предстоит написать. Учтите, что программа должна быть честной. Она не должна содержать операторов, отличных от упомянутых четырех, и, кроме того, ее текст, конечно же, должен быть конечным - то есть состоять из конечного числа строк-операторов. Постарайтесь придумать как можно более короткую программу.

Совершенно не обязательно, чтобы программа закончилась в тот самый момент, когда роботы встретятся. Пусть себе прыгают дальше - лишь бы встретились хоть раз. Не обязательно даже, чтобы программа вообще кончалась. Она вполне может включать бесконечный цикл. Если хотите, можете считать, что это - роботы-диверсанты: каждый из них несет половину критической массы ядерного заряда, и при встрече происходит взрыв, уничтожающий обоих роботов. Жалко только, что при этом пострадает шкала целых чисел.

Хотите регулярно получать новые задачи и познавательные топики? Подпишитесь на рассылку

Комментариев: 5

  1. soulzik пишет:

    Я не уверен что правильно понял как работает оператор PGoTo (если не найдет парашют то продолжит след команду или у робота вылетит BSOD ^_^)
    Написал (если не найдет парашют то продолжит след команду)
    1 Right
    2 PGoTo
    3 Left
    4 Left
    5 PGoTo
    6 Right
    7 Right
    8 Right
    9 PGoTo
    10 Left
    11 Left
    12 Left
    13 Left
    14 PGoTo
    затем будет 5 раз выполняться Right
    19 PGoTo
    затем будет 6 раз выполняться Left
    ну и так далее....
    P.s до идеального далеко :)

  2. Absolute пишет:

    to soulzik : для PGoto нужно указывать метку
    мой алгоритм:
    1 Left
    2 PGoTo 4
    3 GoTo 1
    4 Left
    5 GoTo 4
    роботы движутся влево со скоростью 1 клетка за 3 секунды. когда один из них находит парашют другого, то ускоряется до 1 клетки за 2 секунды - догонит за конечное время.

  3. Absolute пишет:

    to soulzik : для PGoto нужно указывать метку -что он будет делать при нахождении парашюта
    мой алгоритм:
    1 Left
    2 PGoTo 4
    3 GoTo 1
    4 Left
    5 GoTo 4
    роботы движутся влево со скоростью 1 клетка за 3 секунды. когда один из них находит парашют другого, то ускоряется до 1 клетки за 2 секунды - догонит за конечное время.

  4. Andrew пишет:

    Помоему так будет лучше, меньше тактов проподает на GoTo. Робот нашедший парашют будет двигаться быстрее.
    1 Left
    2 PGoTo 4
    3 GoTo 1
    4 Left
    5 Left
    6 GoTo 4

  5. Fincher пишет:

    вопрос оператор GoTo перекидывает на метку... меткой является число на шкале? если да то просто первой же командой GoTo 0 и они встречаются

Комментировать!

Друзья, обращаю ваше внимание, что все бессмысленные и пустые сообщения будут удаляться, ровно как и комментарии с заведомо не существующми e-mail адресами. Спасибо!


Случайное:
ОБЗОР ИГРЫ ASSASIN’S CREED ROGUE
Assassin’s Creed Rogue, последняя на сегодняшний день «полноценная», если так можно сказать, часть и
Полезные советы перед началом прохождения The Witcher 3
Относительно недавно состоялся выход, наверное, одной из самых ожидаемых игр как в жанре RPG, так
История возникновения компьютерных игр
Многие пользователи интересуются феноменом огромной популярности индии - игр, несмотря на то, что мн
Обзор Игры FAR CRY 3
Far Cry 3 – это игра, которая у многих ассоциируется всего лишь с одним словом – «безумие». Мы играе
Какие бывают на данный момент типы компьютерных игр?
Классификация компьютерных игр – это достаточно спорный вопрос, поскольку на данный момент предостав


 
2005-2011 theДжем.ru - сайт для тех, кто умеет читать и думать. ↑ вверх
полезно знать