EbyNegraVochko
Знаток
(425)
1 месяц назад
Даны строки s и v. Нужно найти все перестановки символов 'ABDKLEGV', которые удовлетворяют условию: для каждой пары (a, b) из списка v, индекс символа b в перестановке плюс 1 должен быть подстрокой в строке, соответствующей символу a в списке s.
Исправленный код:
python
Copy
from itertools import permutations
s = '248 13 268 17 678 358 45 1356'.split()
v = 'AB BD DK KL LE EB AG GB GD GE'.split()
# Создаем словарь, где ключ — это символ, а значение — соответствующая строка из s
s_dict = {'A': '248', 'B': '13', 'D': '268', 'K': '17', 'L': '678', 'E': '358', 'G': '45', 'V': '1356'}
# Перебираем все перестановки
for p in permutations('ABDKLEGV'):
# Проверяем условие для всех пар из v
if all(str(p.index(b) + 1) in s_dict[a] for a, b in v:
# Выводим перестановку
print(*p)
Объяснение изменений:
Словарь s_dict:
Мы создали словарь s_dict, где каждому символу (A, B, D, и т.д.) соответствует строка из списка s. Это позволяет легко находить строку, связанную с символом a из пары (a, b).
Условие all:
В условии all мы проверяем, что для каждой пары (a, b) из списка v, значение str(p.index(b) + 1) (индекс символа b в перестановке плюс 1) содержится в строке, соответствующей символу a в словаре s_dict.
Вывод перестановки:
Если перестановка удовлетворяет всем условиям, она выводится.
Пример работы:
Для заданных данных программа найдет все перестановки символов 'ABDKLEGV', которые удовлетворяют условиям задачи, и выведет их.
Примечание:
Если список s и v могут изменяться, убедись, что они корректно соответствуют друг другу.
Код может работать долго, так как перебирает все возможные перестановки (8! = 40320 вариантов). Если нужно ускорить, можно добавить дополнительные проверки или оптимизации
Андрей
Высший разум
(480351)
1 месяц назад
ЗАЧЕМ здесь код?
П8 - Г (4 дороги), откуда П1, П3, П5, П6 - это А, Б, Д, Е
П1 - Е (не имеет связей с П3, П5, П6)
П6 - Б (связана с П3 и П5)
П2 - В (связана с П1 и П3), откуда П3 - А и П5 - Д
Надеюсь, остальные 2 вершины сам поставишь.
P.S. Всё решение - несколько минут.
s = '248 13 268 17 678 358 45 1356'.split()
v = 'AB BD DK KL LE EB AG GB GD GE'.split()
print(*range(1,9))
for p in permutations('ABDKLEGV'):
if all(str(p.index(b) + 1) in p[p.index(a)] for a, b in v):
print(*p)
выдает 1 2 3 4 5 6 7 8
но букв к цифрам не предостовляет