Исправьте ошибку в алгоритме

Мы находимся на острове, на котором закопан клад. Мы находимся в точке с координатами (0, 0). Нам известно, где закопан клад, но этого мало: остров полон опасностей, и нужно перемещаться строго по указаниям карты, которая, к счастью, тоже имеется в нашем распоряжении. Мы хотим найти клад как можно скорее.

Сначала вводятся два числа: координаты клада по оси икс (запад-восток) и игрек (юг-север). Затем следует некоторое количество указаний карты. Каждое указание карты состоит из двух строк. Первая строка содержит слово «север», «юг», «запад» или «восток», вторая — натуральное число, количество шагов, которое нужно пройти в данном направлении. Заключительное указание карты состоит только из одной строки, содержащей слово «стоп».

Программа выводит минимальное количество указаний карты, которое нужно выполнить, чтобы прийти к кладу. Гарантируется, что карта приводит к кладу.

x = 0
y = 0
n = 0
fl = True
c_x = int(input())
c_y = int(input())
stor = input()
cnt = int(input())
while stor != 'стоп':
    if c_x == x and c_y == y:
        fl = False
    if stor == 'север':
        y += cnt
        if fl:
            n += 1
   elif stor == 'запад':
        x -= cnt
        if fl:
            n += 1
   elif stor == 'юг':
        y -= cnt
        if fl:
            n += 1
   elif stor == 'восток':
        x += cnt
        if fl:
            n += 1
   stor = input()
   if stor != 'стоп':
        kol = int(input())
print(n)

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Zhihar

в вашем цикле выход происходит только когда будет получено слово "стоп", поэтому и получаете ответ 3 - столько команд до стоп введено было

вы должны считать шаги и при каждом направлении проверять совпадают ли текущие координаты с координатами клада - если совпадают - выходить из цикла

так же нет проверки, что делать, если клад так и не был достигнут - будет выведено 0, но это означает, что клад уже находился в координатах (0,0), т.е. нужна проверка и вывод к примеру -1 (Хотя условия задачи этого вроде не требуют)

удобнее кстати не плодить несколько вводов одних и тех же данных, когда можно обойтись одним:

вместо

stor = input()
cnt = int(input())
while stor != 'стоп':
   stor = input()
   if stor != 'стоп':
        kol = int(input())

лучше сделать

while True:
   stor = input()
   if stor == 'стоп':
       break
   kol = int(input())
→ Ссылка