Alexey_88
py.user.next
Задача
флаг_искать_проход := да
цикл пока флаг_искать_проход выполнять
флаг_искать_проход := нет
цикл пока справа_нет_стены выполнять
шагнуть вправо
цикл пока снизу_нет_стены выполнять
шагнуть вниз
флаг_искать_проход := да
конец цикла
конец цикла
цикл пока слева_нет_стены выполнять
шагнуть влево
цикл пока снизу_нет_стены выполнять
шагнуть вниз
флаг_искать_проход := да
конец цикла
конец цикла
конец цикла
Не могли бы вы объяснить алгоритм вашей программы?
1. Перед входом в каждый новый (неисследованный) ряд робот помнит, что он должен найти проход в этом новом ряде.
2. При входе в новый (неисследованный) ряд, ещё до начала исследования ряда, робот запоминает, что он не должен искать проход в следующем новом ряде. Поэтому, если робот не найдёт прохода в исследуемом ряде, он остановится у левой стены.
3. Но как только робот обнаруживает проход в исследуемом ряде, он сначала запоминает, что сейчас будет новый (неисследованный) ряд и в нём нужно будет искать проход, а только потом входит в этот новый (неисследованный) ряд.
4. И дальше всё повторяется, начиная с пункта 1.
Этот приём называется “защёлкивающийся флаг” или “флаг-защёлка”.
Alexey_88
Я алгоритм себе представлял так:
робот начинает движение влево пока нет стены слева, если есть проход то двигается вниз, если нет прохода то двигается вправо до стены, если в этом случае есть проход то двигается вниз, если же прохода нет, то двигается влево до стены.
Чтобы составить алгоритм, начни с последнего ряда, будто кроме него нет больше рядов.
Когда алгоритм для последнего ряда готов, добавь один ряд, чтобы теперь было два ряда со стеной между ними и одним проходом в ней.
Так ты поймёшь, что тебе нужен переход между рядами и полный перезапуск обработки нового ряда.
Почему нужен перезапуск обработки нового ряда? Потому что в новом ряде при движении вправо ты уверен, что слева от робота в стене нет проходов. А на основании чего сложилась такая уверенность, если этот ряд новый и ты слева ещё ничего не проверял? Так вот, чтобы понимать, что этот ряд новый, а не старый, это откуда-то нужно вспоминать или просто знать. Это знание можно хранить в флажке, а можно хранить в самих языковых конструкциях.
Хранение знаний в конструкциях можно наблюдать в этой задаче
Имеется 12 шаров и рычажные весы.
Известно, что один из шаров отличается по весу от остальных, при этом неизвестно, тяжелее он или легче.
Каким образом при помощи лишь трёх взвешиваний найти отличающийся шар?