— Стандартных команд три: «курс — норд» (то есть на север) «право руля» и «полный вперед».
— А проверки?
— Только одна: «прямо по курсу мина».
— Все ясно, — сказал Петя. — Я выдам программу одной левой!
— Сначала спецификацию, — предупредил Казимир.
— Чтобы выйти в открытое море, нужно идти на север, — начал Петя. — Значит, первые две команды в программе должны быть: «курс — норд» и «полный вперед». Так?
— Продолжай, — сказал Казимир.
— Предположим, что впереди по курсу появится мина. Если Исполнитель ее увидит, то должен выполнить команду «право руля». Так?
— Продолжай, — сказал Казимир. — Но учти, что после этой команды мы повернем с норда на ост. С севера на восток. А открытое море у нас — на норде.
— Ясное дело, — сказал Петя. — Мы повернем на восток, чтобы не столкнуться с миной. После поворота, когда мы проедем мину, Кристина выполнит новую команду: «курс — норд». И мы снова повернем к открытому морю. Проедем мину — и повернем.
— Пиши программу, — сказал Казимир и, открыв Краткий философский словарь, погрузился в изучение слова «плюрализм».
А Петя напечатал такую программу:
— Готово, — сказал Петя.
Казимир дернул головой и перекинул монокль из правого глаза в левый.
— Так, — сказал он. — Ты использовал конструкцию разветвления и цикла…
— Да.
— А почему ты написал: «повторять миллион раз»? Почему не полмиллиона? Или не десять миллионов?
— Для ровного счета, — ответил Петя. — Откуда я знаю, сколько мин нам встретится, пока мы не выйдем в открытое море? Но уж не больше миллиона…
— А если миллиард?
— Тогда мы взорвемся, — хладнокровно ответил Петя. — Миллион мин объедем, а на миллион первой — взорвемся.
— А мы с твоей программой еще раньше взорвемся, — заметил Казимир. — Или сядем на мель.
— Это почему?
— Гляди, — и Казимир начертил на карте курс корабля:
— При каждой встрече с миной, — начал объяснять Казимир, — Исполнитель будет выполнять команду «право руля». Поскольку в восточной части бухты минное поле очень густое, то «Котангенс» будет стремительно отклоняться к востоку. А так как береговая дуга бухты в этом месте круто уходит на север, то мы сядем на мель раньше, чем пересечем минное поле. Но это — в лучшем случае. А в худшем — мы столкнемся с миной сразу после команды «право руля». Ведь у Исполнителя отсутствует проверка «справа по борту мин нет», и поворачивать корабль Кристина будет вслепую. А вдруг как раз в том месте, куда она повернет, — стоит мина? Разве можно вслепую разъезжать по минным полям? Нет, адмирал, ваша программа никуда не годится.
— А что же делать? — спросил Петя.
— Как что? — удивился Казимир. — Нужно делать то, что говорит нам карта. А она говорит: в западной части бухты мин гораздо меньше, чем в восточной. Значит, идти по западной части безопаснее. А тебя почему-то несет в восточную.
— Но ведь прокладывать курс по западной части я не могу, — сказал Петя.
— Почему?
— А разве вы не понимаете? У меня не хватает для этого команд.
— Хватает, — сказал Казимир. — Нужно, Петя, нужно, чтобы «Котангенс» выходил в море по западной части бухты.
— Казимир, вы меня прямо удивляете. Не может «Котангенс» идти по западной части. Для этого Исполнитель должен понимать команду «Лево руля». Но она же не входит в набор стандартных команд. Корабль может идти или на север, или на восток. Неужели это не понятно?
— Корабль может идти на запад, — упрямо сказал Казимир. — При этом Рулевой не обязан понимать команду «лево руля». Достаточно двух команд «право руля» и «полный вперед».
— Как это? — спросил Петя.
— Сдаешься? — спросил Казимир.
— Нет, — сказал Петя, — подумаю.
ОПИСАНИЕ НЕСТАНДАРТНЫХ КОМАНД
— Казимир, — сказал Петя. — А что если после команды «право руля» и «полный вперед» перед кораблем опять появится мина?
— Прекрасный вопрос! — воскликнул Великий Магистр. — В самом деле, что — тогда?
— Тогда стандартная проверка обнаружит эту мину, и, значит, рулевой снова выполнит команду «право руля»…
— И…
— …и корабль пойдет в обратную сторону!
— Следовательно, рулевой выполнит команду «развернуться», верно?