karpovcourseschat | Unsorted

Telegram-канал karpovcourseschat - karpov.courses: чат

14001

Телеграм-канал: https://t.me/KarpovCourses Навигация по полезным постам: https://telegra.ph/Navigaciya-05-19 Подать заявку на разбан: https://forms.yandex.ru/cloud/6671e51d43f74f18939aadf0/

Subscribe to a channel

karpov.courses: чат

Всем привет. Посоветуйте какой-нибудь курс по excel

Читать полностью…

karpov.courses: чат

city_map[order[0]][order[1]]

Читать полностью…

karpov.courses: чат

Так вы проверяли тест, на котором не работает ваше решение?

Читать полностью…

karpov.courses: чат

жестких условий нет на порядке прохождения

Читать полностью…

karpov.courses: чат

Так вы проверяли тест, на кором не работает ваше решение?

Читать полностью…

karpov.courses: чат

Что-то у меня сомнение, что этот вариант оптимальный. Я не знаю как проходит река(и), но если бы ее не было, 100% сначала надо в (46, 33), после (1, 1)

Читать полностью…

karpov.courses: чат

собственно впихиваешь в список и всё

Читать полностью…

karpov.courses: чат

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

Читать полностью…

karpov.courses: чат

import pandas as pd
from collections import deque

# Загрузка карты города
url = 'https://drive.google.com/uc?id=1-crPzL6qMinByPzsrEHhGn1EJ1MfD3GX'
try:
df = pd.read_csv(url, names=list(range(0, 100, 1)))
city_map_list = df.values.tolist()
except Exception as e:
print("Ошибка при загрузке карты:", e)
city_map_list = []

def bfs(start, goal, city_map):
queue = deque([start])
visited = set()
visited.add(start)
parent = {start: None}

directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # right, down, left, up

while queue:
current = queue.popleft()

if current == goal:
break

for direction in directions:
neighbor = (current[0] + direction[0], current[1] + direction[1])

if (0 <= neighbor[0] < len(city_map) and
0 <= neighbor[1] < len(city_map[0]) and
city_map[neighbor[0]][neighbor[1]] == 1 and
neighbor not in visited):
visited.add(neighbor)
parent[neighbor] = current
queue.append(neighbor)

# Восстановление пути
if goal in parent:
path = []
step = goal
while step is not None:
path.append(step)
step = parent[step]
return path[::-1] # Возвращаем путь в правильном порядке
else:
return None # Путь не найден

def find_route(courier_location, orders_location, city_map):
route = []
current_position = courier_location

for order in orders_location:
if city_map[order[0]][order[1]] == 0:
print(f"Заказ {order} находится на непроходимой ячейке.")
continue

path = bfs(current_position, order, city_map)
if path:
route.extend(path[:-1]) # Добавляем все, кроме последнего элемента
current_position = order # Обновляем текущее местоположение курьера
else:
print(f"Нет пути к заказу {order}.")

route.append(current_position) # Добавляем последнюю точку (после всех доставок)
return route

# Пример использования
courier_location = (10, 10)
orders_location = [(1, 1), (92, 13), (46, 33)]

route = find_route(courier_location, orders_location, city_map_list)

# Вывод маршрута
for step in route:
print(step)

Читать полностью…

karpov.courses: чат

Алгоритмов много. Вон вам про BFS написали. Но как вариант можете и используя reinforcement learning запилить😂. А вообще в лоб можно просто через перебор сделать, сохраняя каждую ветвь, и удаляя их если есть совпадения в последнем узле, при длине >= сравниваемой.

Читать полностью…

karpov.courses: чат

суть в том что питоне IDE всё отрабатывает, а вот проверку курса не проходит

Читать полностью…

karpov.courses: чат

если поделишься, ну прям выручишь)

Читать полностью…

karpov.courses: чат

а как же радость преодоления? 😁 ладно, пойду поищу свой код

Читать полностью…

karpov.courses: чат

> люди до изобретения bfs

Читать полностью…

karpov.courses: чат

вопрос скорее к тем кто смог решить данную задачу, но если у кого-то есть решение я буду рад

Читать полностью…

karpov.courses: чат

нужно вот так

city_map[order[1]][order[0]]

Читать полностью…

karpov.courses: чат

вы делаете неверную проверку на воду

Читать полностью…

karpov.courses: чат

import pandas as pd
from collections import deque


url = 'https://drive.google.com/uc?id=1-crPzL6qMinByPzsrEHhGn1EJ1MfD3GX'
df = pd.read_csv(url, names=list(range(0, 100, 1)))
city_map_list = df.values.tolist()


courier_location = (10, 10) # Пример начальной позиции курьера
orders_location = [(1, 1), (92, 13), (46, 33)] # Пример заказов

def bfs(start, goal, city_map):
queue = deque([start])
visited = set()
visited.add(start)
parent = {start: None}

directions = [(0, 1), (1, 0), (0, -1), (-1, 0)] # right, down, left, up

while queue:
current = queue.popleft()

if current == goal:
break

for direction in directions:
neighbor = (current[0] + direction[0], current[1] + direction[1])

if (0 <= neighbor[0] < len(city_map) and
0 <= neighbor[1] < len(city_map[0]) and
city_map[neighbor[0]][neighbor[1]] == 1 and
neighbor not in visited):
visited.add(neighbor)
parent[neighbor] = current
queue.append(neighbor)

# Восстановление пути
if goal in parent:
path = []
step = goal
while step is not None:
path.append(step)
step = parent[step]
return path[::-1] # Возвращаем путь в правильном порядке
else:
return None # Путь не найден

def find_route(courier_location, orders_location, city_map):
route = []
current_position = courier_location

for order in orders_location:
path = bfs(current_position, order, city_map)
if path:
route.extend(path[:-1]) # Добавляем все, кроме последнего элемента
current_position = order # Обновляем текущее местоположение курьера
else:
print(f"Нет пути к заказу {order}.")

route.append(current_position) # Добавляем последнюю точку (после всех доставок)
return route

# Пример использования
route = find_route(courier_location, orders_location, city_map_list)

# Вывод маршрута
print("Маршрут курьера:")
for step in route:
print(step)

# Проверка местоположения курьера после всех доставок
if route:
print(f"Курьер завершил на позиции: {route[-1]}")
else:
print("Курьер не смог завершить маршрут.")

Читать полностью…

karpov.courses: чат

Там же кажется было условие, что прохождение точек может быть любым?

Читать полностью…

karpov.courses: чат

Маршрут должен проходить только по земле, по воде ходить нельзя.
Курьеры могут перемещаться на один шаг из текущего района вправо, влево, вниз или вверх.
Маршрут должен быть сохранен в список, где каждый элемент, это tuple с координатами каждого шага курьера.
Курьер проходит один шаг за 10 минут и может доставлять заказы в любом порядке

Читать полностью…

karpov.courses: чат

но курс не пропускал данный ответ, хотя она работает

Читать полностью…

karpov.courses: чат

(10, 10)
(10, 9)
(10, 8)
(10, 7)
(10, 6)
(10, 5)
(10, 4)
(10, 3)
(10, 2)
(10, 1)
(9, 1)
(8, 1)
(7, 1)
(6, 1)
(5, 1)
(4, 1)
(3, 1)
(2, 1)
(1, 1)
(1, 2)
(1, 3)
(1, 4)
(1, 5)
(1, 6)
(1, 7)
(1, 8)
(1, 9)
(1, 10)
(1, 11)
(1, 12)
(2, 12)
(3, 12)
(4, 12)
(5, 12)
(6, 12)
(7, 12)
(8, 12)
(9, 12)
(10, 12)
(11, 12)
(12, 12)
(13, 12)
(14, 12)
(15, 12)
(16, 12)
(17, 12)
(18, 12)
(19, 12)
(20, 12)
(21, 12)
(22, 12)
(23, 12)
(24, 12)
(25, 12)
(26, 12)
(27, 12)
(28, 12)
(29, 12)
(29, 13)
(30, 13)
(31, 13)
(32, 13)
(33, 13)
(34, 13)
(35, 13)
(36, 13)
(37, 13)
(38, 13)
(39, 13)
(40, 13)
(41, 13)
(42, 13)
(43, 13)
(44, 13)
(45, 13)
(46, 13)
(47, 13)
(48, 13)
(49, 13)
(50, 13)
(51, 13)
(52, 13)
(53, 13)
(54, 13)
(55, 13)
(56, 13)
(57, 13)
(58, 13)
(59, 13)
(60, 13)
(61, 13)
(62, 13)
(63, 13)
(64, 13)
(65, 13)
(66, 13)
(67, 13)
(68, 13)
(69, 13)
(70, 13)
(71, 13)
(72, 13)
(73, 13)
(74, 13)
(75, 13)
(76, 13)
(77, 13)
(78, 13)
(79, 13)
(80, 13)
(81, 13)
(82, 13)
(83, 13)
(84, 13)
(85, 13)
(86, 13)
(87, 13)
(88, 13)
(89, 13)
(90, 13)
(91, 13)
(92, 13)
(92, 14)
(92, 15)
(92, 16)
(92, 17)
(92, 18)
(92, 19)
(92, 20)
(92, 21)
(92, 22)
(92, 23)
(92, 24)
(92, 25)
(92, 26)
(92, 27)
(92, 28)
(92, 29)
(92, 30)
(92, 31)
(92, 32)
(92, 33)
(92, 34)
(92, 35)
(92, 36)
(92, 37)
(92, 38)
(92, 39)
(92, 40)
(92, 41)
(92, 42)
(91, 42)
(90, 42)
(89, 42)
(88, 42)
(87, 42)
(86, 42)
(85, 42)
(84, 42)
(83, 42)
(82, 42)
(81, 42)
(80, 42)
(79, 42)
(78, 42)
(77, 42)
(76, 42)
(75, 42)
(74, 42)
(73, 42)
(72, 42)
(71, 42)
(70, 42)
(69, 42)
(68, 42)
(67, 42)
(66, 42)
(65, 42)
(64, 42)
(63, 42)
(62, 42)
(61, 42)
(60, 42)
(59, 42)
(58, 42)
(57, 42)
(56, 42)
(55, 42)
(54, 42)
(53, 42)
(52, 42)
(51, 42)
(51, 41)
(51, 40)
(51, 39)
(51, 38)
(51, 37)
(51, 36)
(51, 35)
(51, 34)
(51, 33)
(50, 33)
(49, 33)
(48, 33)
(47, 33)
(46, 33)

Читать полностью…

karpov.courses: чат

на выходе получаем путь, что и собственно в примере на курсе

Читать полностью…

karpov.courses: чат

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

Читать полностью…

karpov.courses: чат

import copy


temporary_map = copy.deepcopy(city_map_list)
paths = []
route = []
temporary_map[courier_location[1]][courier_location[0]] = 0

if courier_location[1] - 1 >= 0 \
and temporary_map[courier_location[1] - 1][courier_location[0]] == 1:
paths.append([(courier_location[0], courier_location[1] - 1)])
temporary_map[courier_location[1] - 1][courier_location[0]] = 0

if courier_location[0] + 1 <= len(temporary_map[courier_location[1]]) - 1 \
and temporary_map[courier_location[1]][courier_location[0] + 1] == 1:
paths.append([(courier_location[0] + 1, courier_location[1])])
temporary_map[courier_location[1]][courier_location[0] + 1] = 0

if courier_location[1] + 1 <= len(temporary_map) - 1 \
and temporary_map[courier_location[1] + 1][courier_location[0]] == 1:
paths.append([(courier_location[0], courier_location[1] + 1)])
temporary_map[courier_location[1] + 1][courier_location[0]] = 0

if courier_location[0] - 1 >= 0 \
and temporary_map[courier_location[1]][courier_location[0] - 1] == 1:
paths.append([(courier_location[0] - 1, courier_location[1])])
temporary_map[courier_location[1]][courier_location[0] - 1] = 0

while len(orders_location) > 0:
temp_paths = paths.copy()
for path in temp_paths:
if path[-1] in orders_location:
route = path.copy()
orders_location.remove(path[-1])
paths = [route.copy()]
temporary_map = copy.deepcopy(city_map_list)
temporary_map[path[-1][1]][path[-1][0]] = 0
break
else:
if path[-1][1] - 1 >= 0 and temporary_map[path[-1][1] - 1][path[-1][0]] == 1:
temp_pass = path.copy()
temp_pass.append((path[-1][0], path[-1][1] - 1))
paths.append(temp_pass)
temporary_map[path[-1][1] - 1][path[-1][0]] = 0
if path[-1][0] + 1 <= (len(temporary_map[path[-1][1]]) - 1) and temporary_map[path[-1][1]][path[-1][0] + 1] == 1:
temp_pass = path.copy()
temp_pass.append((path[-1][0] + 1, path[-1][1]))
paths.append(temp_pass)
temporary_map[path[-1][1]][path[-1][0] + 1] = 0
if path[-1][1] + 1 <= (len(temporary_map) - 1) and temporary_map[path[-1][1] + 1][path[-1][0]] == 1:
temp_pass = path.copy()
temp_pass.append((path[-1][0], path[-1][1] + 1))
paths.append(temp_pass)
temporary_map[path[-1][1] + 1][path[-1][0]] = 0
if path[-1][0] - 1 >= 0 and temporary_map[path[-1][1]][path[-1][0] - 1] == 1:
temp_pass = path.copy()
temp_pass.append((path[-1][0] - 1, path[-1][1]))
paths.append(temp_pass)
temporary_map[path[-1][1]][path[-1][0] - 1] = 0
paths.remove(path)
print(route)

Читать полностью…

karpov.courses: чат

решал когда-то, могу описать алгоритм как решал

Читать полностью…

karpov.courses: чат

то есть данная ошибка _ Не все заказы были доставлены

Недоставленные заказы: [(27, 80), (26, 75), (43, 52), (42, 76)]
изза того, что путипересекаются?

Читать полностью…

karpov.courses: чат

так можно код)) я уже 88 попыток хернул в это задание)

Читать полностью…

karpov.courses: чат

Я реализовал такую идею: из точки курьера начинают расползаться во все стороны все возможные пути (чтоб их число не становилось астрономическим, им нельзя пересекаться). Как только один из путей утыкается в адрес доставки - он объявляется основным и процесс повторяется, пока не покроем все адреса.

Решение неоптимальное (общий путь не всегда кратчайший), но работает и код несложный.

Думаю, его можно усложнить для поиска наикратчайшего пути, но я тогда не стал заморачиваться.

Читать полностью…

karpov.courses: чат

В нашем городе есть большая река с 4-мя мостами. Карта города также закодирована при помощи списка из списков. Чтобы скачать карту на ваш компьютер, выполните следующий код:

import pandas as pd

url='https://drive.google.com/uc?id=1-crPzL6qMinByPzsrEHhGn1EJ1MfD3GX'
df = pd.read_csv(url, names=list(range(0, 100, 1)))
city_map_list = df.values.tolist()


Теперь в переменной city_map_list cписок из списков 100 на 100 — карта города. Недавно в городе запустилась служба доставки, но курьеры жалуются, что из-за сложной географии мостов и улиц тяжело найти дорогу. Поэтому нам нужно написать программу для навигатора.

Задача:

В переменных courier_location, orders_location city_map_list сохранены позиции курьера, координаты доставок и карта города.

courier_location — tuple из двух целых чисел.
Координаты стартового местоположения курьера в формате (x, y). Где x и y — это целые числа от 0 до 99.

Пример courier_location = (10, 10)

orders_location — список как минимум из одного tuple с координатами.
Координаты, по которым курьер должен доставить заказы. В списке хранится произвольное число tuple с координатами точек назначения, которые должен посетить курьер.

Пример orders_location = [(1, 1), (92, 13), (46, 33)]

city_map_list — список из списков 100 на 100, карта города, которую мы загрузили выше.
Вам известно местоположение курьера, набор координат мест назначения и карта города. Теперь нужно написать скрипт, который создаст переменную route и сохранит в нее маршрут, по которому должен пройти курьер, чтобы разнести все доставки. При формировании маршрута необходимо выполнить следующие условия:

Маршрут должен проходить только по земле, по воде ходить нельзя.
Курьеры могут перемещаться на один шаг из текущего района вправо, влево, вниз или вверх.
Маршрут должен быть сохранен в список, где каждый элемент, это tuple с координатами каждого шага курьера.
Курьер проходит один шаг за 10 минут и может доставлять заказы в любом порядке.
Пример:

Рассмотрим работу навигатора на нашем городе 5 на 5.

city_map_list = [
[1, 1, 0, 0, 1],
[1, 1, 0, 0, 1],
[1, 1, 1, 1, 1],
[0, 0, 0, 0, 1],
[0, 0, 0, 0, 1]
]

courier_location = (2, 2) # стартовая позиция курьера
orders_location = [(4, 0), (0, 2), (4, 3)] # координаты для доставки трех товаров

route = [
(3, 2),
(4, 2),
(4, 1),
(4, 0), # адрес доставки
(4, 1),
(4, 2),
(3, 2),
(2, 2),
(1, 2),
(0, 2), # адрес доставки
(1, 2),
(2, 2),
(3, 2),
(4, 2),
(4, 3) # адрес доставки
]

Читать полностью…
Subscribe to a channel