Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 4

Сколько шагов нужно сделать, чтобы дойти по знакам из левого нижнего квадрата до правого верхнего

23.05.2020, 20:41. Показов 1568. Ответов 10

Студворк — интернет-сервис помощи студентам
Не могу понять почему не проходит один тест (это точно не из-за времени, скорее всего тот в котором нужно вывести " ! ", но это не точно), программа вроде лёгкая, но чёт туплю уже несколько дней, помогите !!!

Мой код (сорян, что кривой (новичок) ):
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
a = int(input())
b = int(input())
field = []
for i in range(a):
    field.append(list(input()))
field.reverse()
a1 = 0
b1 = 0
square = field[a1][b1]
step = 0
bad =0
while square != "*":
    if square == '>':
        b1 += 1
        step += 1
    elif square == '<':
        b1 -= 1
        step += 1    
    elif square == '^':
        a1 += 1
        step += 1
    elif square == 'v':
        a1 -= 1
        step += 1
    if step = a * b:
        print(" ! ")
        bad += 1
        break        
    if a1 >= a or b1 >= b or a1 < 0 or b1 < 0:
        print(" ! ")
        bad += 1
        break
    square = field[a1][b1]
if bad == 0:
    print(step)
Условие:

Формат входных данных
В первой строке вводится a (высота), во число b (ширина) (1 ⩽ a, b ⩽ 101).
B cледующиx a строкax содержатcя b символов. Каждый символ определяет направление в
квадрате: вправо ‘>’, влево ‘<’, вверх ‘^’ и вниз ‘v’. В правом верхнем квадрате стоит символ ‘*’.
Формат выходных данных
Выведите, сколько шагов нужно сделать, чтобы дойти по знакам из левого нижнего квадрата до правого
верхнего. Выведите " ! ", если пути нет.

Ввод:

3 4
>>>*
>^<v
^>^v

Вывод:
5

Добавлено через 3 минуты
Так же буду благодарен, если найдёте, когда программа должна выводить " ! ", как я понял - когда робот выходит из прямоугольника и когда попадает в вечный цикл ( >< ), но есть ли ещё?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.05.2020, 20:41
Ответы с готовыми решениями:

Найти расстояние от верхнего левого угла до правого нижнего
срочно плиз!! нужно написать программу. суть задачи в следующем: задается произвольная прямоугольная матрица размером до 20(длина) и...

Движение объекта из левого нижнего угла до правого верхнего, и обратно
Сделал программу чтобы шарик двигался из левого нижнего угла до правого верхнего, но мне нужно чтобы он теперь пошел обратно. Как это...

Найти координаты левого нижнего и правого верхнего углов минимального прямоугольника
Доброго времени суток! Имеется задачка: Даны два прямоугольника, стороны которых паралленльны или перпендикулярны осям координат....

10
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
24.05.2020, 06:02
Цитата Сообщение от Awseder Посмотреть сообщение
Условие:
Это все условие задачи?
0
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 4
24.05.2020, 11:44  [ТС]
Цитата Сообщение от eaa Посмотреть сообщение
Это все условие задачи?
Да, больше ничего нет.
Цитата Сообщение от Awseder Посмотреть сообщение
Формат входных данных
В первой строке вводится a (высота), во число b (ширина) (1 ⩽ a, b ⩽ 101).
B cледующиx a строкax содержатcя b символов. Каждый символ определяет направление в
квадрате: вправо ‘>’, влево ‘<’, вверх ‘^’ и вниз ‘v’. В правом верхнем квадрате стоит символ ‘*’.
Формат выходных данных
Выведите, сколько шагов нужно сделать, чтобы дойти по знакам из левого нижнего квадрата до правого
верхнего. Выведите " ! ", если пути нет.
Ввод:
3 4
>>>*
>^<v
^>^v
Вывод:
5
0
 Аватар для vlisp
1059 / 980 / 153
Регистрация: 10.08.2015
Сообщений: 5,320
24.05.2020, 12:51
интересно, как ты двумерный массив заполняешь единственным циклом...
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
24.05.2020, 13:13
отмечай те точки в которых уже побывал, если вернулся в посещенную точку значит выход.
0
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 4
24.05.2020, 16:19  [ТС]
А как это сделать?
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
24.05.2020, 18:16
например:
field[a1][b1] = '$'
в теле цикла перед if
1
0 / 0 / 0
Регистрация: 23.05.2020
Сообщений: 4
24.05.2020, 18:55  [ТС]
Сделал, но всё равно какая-то лажа в том же тесте (тест не знаю, но это точно не время)
0
16 / 11 / 6
Регистрация: 11.06.2012
Сообщений: 20
25.05.2020, 01:31
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from random import randint
a = int(input("Введите высоту "))
b = int(input("Введите ширину "))
 
arr = [[randint(1, 4) for j in range(b)] for i in range(a)]
arr[0][-1] = '*'
 
for i in range(a):
    for j in range(b):
        if arr[i][j] == 1:
            arr[i][j] = '>'
        elif arr[i][j] == 2:
            arr[i][j] = '<'
        elif arr[i][j] == 3:
            arr[i][j] = '^'
        elif arr[i][j] == 4:
            arr[i][j] = 'v'
 
for i in range(a):
    print(arr[i], end="\t")
    print("\n")
# Вот этот цикл закомментируй
for i in range(a):
    for j in range(b):
        if arr[0][j] == '^':
            arr[0][j] = '!'
        if arr[a-1][j] == 'v':
            arr[a-1][j] = '!'
        if arr[i][0] == '<':
            arr[i][0] = '!'
        if arr[i][b-1] == '>':
            arr[i][b-1] = '!'
# иначе будет чаще выходить 
# за края фигуры.
i = -1
j = 0
count = 0
 
for k in range(a*b):
    if arr[i][j] == '>':
        j += 1
    elif arr[i][j] == '<':
        j += -1
    elif arr[i][j] == '^':
        i += -1
    elif arr[i][j] == 'v':
        i += 1
    elif arr[i][j] == '!':
        print("Вышел из прямоугольника =)")
        print("!!!")
        break
    elif arr[i][j] == '*':
        print("До выхода ", count, " шагов")
        break
    if count+1 >= a*b:
        print("Вечный цикл =)")
        print(" !!!!!! ") 
    count += 1
# for i in range(a):
#     print(arr[i], end="\t")
#     print("\n")
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
25.05.2020, 08:50
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
n, m = map(int, input().split())
d = {'>': (0, +1), '<': (0, -1), 'v': (+1, 0), '^': (-1, 0)}
a =[list(input()) for _ in range(n)]
x = n-1
y = 0
cur = a[x][y]
count = 0
while cur in '><v^':
    a[x][y] = '$'
    x += d[cur][0]
    y += d[cur][1]
    if (0 <= x < n) and (0 <= y < m) and (a[x][y] in '*><v^'):
        cur = a[x][y]
    else:
        print('!')
        break
    count += 1
else:
    print(count)
    # нужно видимо еще проверить что пришли в правый верхний угол
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
25.05.2020, 11:22
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
a, b = 3, 4
 
matrix = [
    [">", ">", ">", "*"],
    [">", "^", "<", "v"],
    ["^", ">", "^", "v"]
]
 
actions = {
    '>': lambda r, c: (r, c + 1),
    'v': lambda r, c: (r + 1, c),
    '<': lambda r, c: (r, r - 1),
    '^': lambda r, c: (r - 1, c)
}
 
r, c = a - 1, 0
counter = 0
 
while 0 <= r < a and 0 <= c < b:
    action = matrix[r][c]
    if action == "*":
        print(counter)
        break
    else:
        r, c = actions[action](r, c)
        counter += 1
else:
    print("!")
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2020, 11:22
Помогаю со студенческими работами здесь

Посчитать сумму диагонали матрицы с верхнего правого угла до нижнего левого
дана матрица посчитать сумму диагонали с верхнего правого угла до нижнего левого

Найти координаты левого нижнего и правого верхнего углов минимального прямоугольника
даны два прямоугольника,стороны которых параллельны или перпендикулярны осям координат.Известны координаты левого нижнего угла каждого из...

Ассемблерные вставки - напечатать символы с левого верхнего угла и до правого нижнего
Требуется: 2 половины экрана. на одной половинке символы печатаются с левого верхнего угла и до правого нижнего, а на другой символы...

Найти координаты левого нижнего и правого верхнего углов минимального прямоугольника
Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего и правого...

Найти координаты левого нижнего и правого верхнего углов минимального прямоугольника
Даны два прямоугольника, стороны которых параллельны или перпендикулярны осям координат. Известны координаты левого нижнего угла каждого из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru