Для упрощения алгоритма движения робота по полю, давайте проанализируем предложенные команды:
Исходный алгоритм:
33232241
33232241
Каждая команда обозначает:
- 1 — вверх
- 2 — вниз
- 3 — влево
- 4 — вправо
- 5 — закрасить
Теперь разберем последовательность команд:
Первый набор команд (33232241):
- 3 (влево)
- 3 (влево)
- 2 (вниз)
- 2 (вниз)
- 4 (вправо)
- 1 (вверх)
При интерпретации последовательности:
- Первые два "3" (влево) двигают робота на 2 клетки влево.
- Затем два "2" (вниз) двигают робота на 2 клетки вниз.
- "4" (вправо) перемещает робота на 1 клетку вправо.
- Наконец, "1" (вверх) поднимает робота на 1 клетку вверх.
Так, если обозначить текущую позицию как (x, y), то после выполнения действий получим:
- Исходная позиция: (x, y)
- После "33": (x-2, y)
- После "22": (x-2, y-2)
- После "4": (x-1, y-2)
- После "1": (x-1, y-1)
Второй набор команд (33232241) имеет те же действия, что и первый набор, что делает его повторющим.
Теперь давайте упростим:
- Объединим команды:
- Выполнив "33", мы получаем (x-2, y).
- Два "22" приводят к (x-2, y-2).
- Затем "4" дает (x-1, y-2) и "1" равно (x-1, y-1).
Эти действия были выполнены дважды, поэтому:
- Оптимизируем команду:
- Вместо повторения одной и той же последовательности, мы можем объединить движения:
- "33" (влево на 2)
- "22" (вниз на 2)
- "41" (вправо на 1 и вверх на 1)
- Вместо повторения одной и той же последовательности, мы можем объединить движения:
Теперь записываем финальное упрощение:
Упрощенный алгоритм:
332241
Этот вариант команды выполняет все те же действия в два раза менее повторяющейся форме.