Решение задач А-13 (Робот из демоверсии 2013)

advertisement
Новый РОБОТ –
ПОКА и ЕСЛИ
О.Б. Богомолова,
Д.Ю. Усенков
Задача. Система команд исполнителя РОБОТ, «живущего»
в прямоугольном лабиринте на клетчатой плоскости:
ввер вни влев вправ
з
о
о
х
При выполнении любой из этих команд РОБОТ перемещается на одну
клетку соответственно: вверх ↑, вниз ↓, влево ←, вправо →.
Четыре команды проверяют истинность условия отсутствия стены у каждой
стороны той клетки, где находится РОБОТ:
Цикл
сверху
свобод
но
снизу
свобод
но
слева
свобод
но
ПОКА
< условие >
справа
свобод
но
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ < условие >
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2
(если условие ложно)
В конструкциях ПОКА и ЕСЛИ условие может быть составным –
с использованием логических операций И, ИЛИ, НЕ.
Если РОБОТ начнёт движение в сторону находящейся рядом с ним стены, то
он разрушится и программа прервётся.
Сколько клеток лабиринта соответствуют требованию, что, начав движение
в ней и выполнив предложенную программу, РОБОТ уцелеет
и остановится в закрашенной клетке (клетка F6)?
НАЧАЛО
ПОКА < справа свободно ИЛИ снизу свободно >
ЕСЛИ < справа свободно >
вправо
КОНЕЦ ЕСЛИ
ЕСЛИ < снизу свободно >
1
вниз
2
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
3
КОНЕЦ
4
5
6
A
B
C
D
E
F
Решение
1. Цикл ПОКА < справа свободно ИЛИ снизу свободно > выполняется
до тех пор, пока в текущей клетке (в которой начинается очередное
выполнение тела цикла) не окажется стенка одновременно снизу
и справа:
Конечная
клетка
Решение
2. Тело цикла ПОКА состоит из двух операторов ЕСЛИ, из которых первый
смещает РОБОТа на одну клетку вправо (если справа нет стенки),
а второй – на одну клетку вниз (если снизу нет стенки).
Только после выполнения (или пропуска) этих двух операторов ЕСЛИ
снова проверяется условие цикла ПОКА.
Будем называть клетку, в которой начинается выполнение очередного
прохода цикла, ключевой клеткой (в том числе клетку,
откуда начинается движение РОБОТа).
Тогда каждый проход цикла даёт движение «зигзагом» вправо и вниз
(либо при наличии стенки с одной из сторон – только вправо
или только вниз) до следующей ключевой клетки:
Ключевая
клетка
Решение
3. Анализируем клетки лабиринта.
3.1. Клетка A1: не является конечной (не имеет стенок справа и снизу),
поэтому РОБОТ из нее переместится сначала в клетку B1, а затем –
в клетку B2:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Клетка B2 тоже не является конечной, поэтому РОБОТ из нее
переместится сначала в клетку C2, а затем – в клетку C3:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Клетка C3 – не конечная, поэтому РОБОТ переместится в клетку D3,
а затем в клетку D4:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Клетка D4 – не конечная, поэтому РОБОТ переместится в клетку E4,
а затем в клетку E5:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Клетка E5 – не конечная, поэтому РОБОТ переместится в клетку F5,
а затем в клетку F6:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Итак, РОБОТ благополучно пришел в требуемую клетку F6.
Очевидно, не менее благополучно он придет в клетку F6 из любой
пройденной на этом пути ключевой клетки.
Помечаем все эти ключевые клетки зеленым цветом:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
3.2. Клетка A2: не является конечной, поэтому РОБОТ из нее
переместится сначала в клетку B2, а затем – в клетку B3:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Клетка B3 не конечная, поэтому РОБОТ из нее переместится
сначала в клетку C3, а затем – в клетку C4:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Аналогично далее РОБОТ переместится сначала в клетку D4,
а затем в клетку D5. После этого он проследует в клетку E5,
а потом в клетку E6:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
А теперь – внимание! – на очередном проходе цикла первый оператор
ЕСЛИ будет выполнен (стенки справа нет) и РОБОТ сместится вправо
в клетку F6, а второй оператор ЕСЛИ будет пропущен
(снизу есть стенка):
1
2
3
4
5
6
A
B
C
D
E
F
Решение
РОБОТ снова благополучно пришел в клетку F6 – помечаем зеленым
цветом все пройденные ключевые клетки:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
3.3. Клетка A3: не является конечной, поэтому РОБОТ из нее
переместится сначала в клетку B3, а затем – в клетку B4:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Клетка B4 – не конечная (стенка есть только справа), поэтому
цикл ПОКА выполняется. Но первый оператор ЕСЛИ будет пропущен
(справа есть стенка). Второй оператор ЕСЛИ будет выполнен
(снизу стенки нет), и РОБОТ переместится в клетку B5:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Клетка B5 тоже не конечная. Аналогично предыдущему случаю,
первый оператор ЕСЛИ будет пропущен (справа есть стенка),
а второй оператор ЕСЛИ будет выполнен (снизу стенки нет),
и РОБОТ переместится в клетку B6:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Однако клетка B6 – неправильная («ловушка»).
Поэтому все ключевые клетки, пройденные РОБОТом на этом пути,
надо пометить красным цветом:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Очевидно, то же самое (попадание РОБОТа в «ловушку» B6)
будет происходить, если РОБОТ начнет движение из клеток
A4, A5 и A6 (в последнем случае РОБОТ первым оператором
ЕСЛИ сместится в B6, а второй ЕСЛИ будет пропущен).
Следовательно, эти ключевые клетки помечаются красным цветом:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
3.4. Клетка B1: очевидно, РОБОТ пойдет по клеткам: C1–C2 и D2–D3.
Клетка D3 – не конечная (нет стенки снизу). Поскольку справа есть
стенка, первый оператор ЕСЛИ пропускается, а второй выполняется.
РОБОТ перейдет в клетку D4 и далее «по накатанному пути».
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Вывод: ключевые клетки B1, C2 и D3 можно отметить
зеленым цветом:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Так же РОБОТ поведет себя, начиная движение из клеток C1, D1 и D2
(«натыкаясь» по пути на стенку справа, он будет пропускать первый
оператор ЕСЛИ и смещаться вниз, пока стенка не закончится,
а дальше пойдет «своим путем» в клетку F6).
Все эти клетки можно пометить зеленым цветом:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Не менее очевидно поведение РОБОТа, который начинает путь
из клеток C5, C6 и D6, только здесь его ограничивает стенка снизу
(пропуск второго оператора ЕСЛИ), и РОБОТ будет продвигаться
вдоль этой нижней стенки по горизонтали до целевой клетки F6:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
3.5. Клетка E1, а также все остальные еще не рассмотренные клетки:
начиная из них движение, РОБОТ будет смещаться вправо и вниз
до правой стенки, а затем пойдет вниз вдоль этой стенки
(за счет пропусков первого ЕСЛИ) до целевой клетки F6.
Значит, все эти клетки можно пометить зеленым цветом:
1
2
3
4
5
6
A
B
C
D
E
F
Решение
Остается подсчитать количество клеток, помеченных зеленым цветом.
Их 29 штук.
1
Зеленых
клеточек – 29
2
3
4
5
6
A
Ответ: 29.
B
C
D
E
F
Download