Смахивает это на “Путника” из “Программирования для математиков”, только тут шлейф ещё. Там у него были определены предписания (методы).
Система предписаний в компактной форме:
1. начать работу
2. впереди/справа/слева свободно : да/нет
3. впереди/справа/слева занято : да/нет
4. сделать шаг
5. шагать до упора
6. повернуться направо/налево
7. повернуться на север/юг/запад/восток
8. кончить работу
"Путник"
Луноход, который находится в неизвестной местности.
Местность называется квадрантом, который по краю обнесён сплошной стеной. В квадранте могут находиться препятствия.
Система предписаний в компактной форме:
1. начать работу
2. впереди/справа/слева свободно : да/нет
3. впереди/справа/слева занято : да/нет
4. сделать шаг
5. шагать до упора
6. повернуться направо/налево
7. повернуться на север/юг/запад/восток
8. кончить работу
Дополнительные сведения:
1. начать работу
Путник оказывается в северо-западной клетке лицом на восток
4. сделать шаг
приводит к отказу, если впереди занято
5. шагать до упора
не приводит к отказу, если впереди занято
Тут как бы надо проверять, есть ли препятствие. Если препятствия нет, то надо делать шаг всей гусеницей. Если препятствие есть, то надо обогнуть препятствие. И вот эта процедура “обогнуть препятствие” - это такая функция, управляющая исполнителем (не его метод, а отдельная функция, которая им управляет). Потому что препятствия можно разные придумать, поэтому для каждого вида препятствия будет своя собственная процедура огибания. Но исполнитель при этом должен один и тот же использоваться, поэтому методы его должны быть очень простыми (атомарными) и подходящими под любую ситуацию. А все сложные действия описываются в таких внешних процедурах.
Так что хоть гусеница и на линии, по которой можно ползать только налево и направо, в действительности, для огибания препятствия ей понадобится ползти вверх на одну клетку, потом ползти по препятствию и потом ползти вниз на одну клетку. То есть мы уже получаем, что гусеница не по прямой ползёт, а по плоскости. Соответственно, и координаты у каждого её сегмента будут двумерными. Так что это вполне тот же самый Путник, только у него надо шлейф сохранять. Видимо, даже надо рассматривать всю гусеницу в виде множества путников, движущихся друг за другом. Тогда гусеница может заползти на два разных препятствия одновременно и это будет нормально смотреться, как у неё в правой части огибается одно препятствие, а в левой части огибается второе препятствие.