На рисунке справа схема дорог Н-ского района изображена в виде графа, в таблице содержатся сведения о длинах этих дорог (в километрах).
| П1 | П2 | П3 | П4 | П5 | П6 | П7 | |
| П1 | 45 | 10 | |||||
| П2 | 45 | 40 | 55 | ||||
| П3 | 15 | 60 | |||||
| П4 | 10 | 40 | 20 | 35 | |||
| П5 | 15 | 55 | |||||
| П6 | 55 | 60 | 20 | 55 | 45 | ||
| П7 | 35 | 45 |
Так как таблицу и схему рисовали независимо друг от друга, то нумерация населённых пунктов в таблице никак не связана с буквенными обозначениями на графе. Определите, какова длина дороги из пункта В в пункт Е. В ответе запишите целое число — так, как оно указано в таблице.
Пункт В — единственный пункт с пятью дорогами, значит, ему соответствует П6, а пункт Е − единственный с четырьмя дорогами, значит, ему соответствует П4.
Длина дороги из П6 в П4 равна 20.
Ответ: 20.
Приведём решение Сергея Стрелюхина на языке Python.
from itertools import permutations as p
sort = lambda x: dict([k, ''.join(sorted(v))] for k, v in sorted(x.items()))
y = lambda x, c: {c[k]: ''.join(map(lambda d: c[d], v)) for k, v in x.items()}
s = {'1': '24', '2': '146', '3': '56', '4': '1267', '5': '36',\
'6': '23457', '7': '46'}
S = sort({'А': 'БВ', 'Б': 'АВ', 'В': 'АБДЕГ', 'Г': 'ВЕК', 'Д': 'ВЕ',\
'Е': 'ДВГК', 'К': 'ЕГ'})
# Получаем номера городов
print([t for i in p('1234567') if (t:={k: v for k, v in zip(i, 'АБВГДЕК')}) if sort(y(s,t))==S][0])
# Вывод: {'3': 'А', '5': 'Б', '6': 'В', '2': 'Г', '7': 'Д', '4': 'Е', '1': 'К'}
# В - 6 пункт; Е - 4 пункт Тогда В -> E == 20
Примечание. Данную программу можно использовать для решения других задач этого типа.
Приведём решение Сергея Донец на языке PascalABC.NET.
uses School;
begin
{кодировка таблицы - строки и столбцы - числа.
первая цифра в числе -> номер строки + цифры столбцов где указаны км}
var d:='124 2146 356 41267 536 623457 746';
{кодировка карты -> 1я буква исходный пункт + направление }
var m:='АБВ БАВ ВАБДЕГ ГВЕК ДВЕ ЕВГДК КЕГ';
Println(1234567);// шапка: столбцы (строки)
'АБВГДЕК'.Permutations // все буквы - перестановки
.Where(p->d.Translate('1234567',p)
//транслируем все цифры в эту перестановку
.Split.All(z->m.Split.Any(y->y.ToHashSet=z.ToHashSet))).Print;
{ вывод 1234567
КГАЕБВД КГБЕАВД
расшифровка:
нужно ВЕ (длина дороги из пункта В в пункт Е).
этим буквам соответствуют цифры 64
смотрим по таблице 64 => 20 км Ответ: 20.}
end.

