Два посла на конференции ООН хотят говорить друг с другом, но, к сожалению, каждый говорит только на одном языке - и они не на одном языке. К счастью, у них есть доступ к нескольким переводчикам, каждый из которых понимает и говорит на нескольких языках. Ваша задача - определить самую короткую цепочку переводчиков (поскольку вы хотите, чтобы при переводе было как можно меньше потерь), чтобы два посла могли говорить друг с другом.
кодирование
Ввод: два языка в виде двухбуквенных строчных букв (язык каждого посла) и список списков языков (один список для каждого доступного переводчика)
Вы также можете взять целые числа вместо двухбуквенных кодов.
Вывод: Последовательность переводчиков по индексу или значению, представляющая собой одну из самых коротких цепочек переводчиков, которая позволяет двум послам общаться. Если нет допустимой цепочки переводчиков, поведение не определено. (Вы можете потерпеть крах, вывести любое произвольное значение или указать ошибку)
Действительная цепочка переводчиков - это та, в которой первый переводчик говорит на языке одного посла, второй и последующие переводчики говорят по крайней мере на одном языке с предыдущим переводчиком, а последний переводчик говорит на языке другого посла.
Примеры
Использование индексации с нуля:
es, en, [
[es, en]
] ==> [0]
en, en, [] ==> []
en, jp, [
[en, zh, ko, de],
[jp, ko]
] ==> [0, 1]
es, ru, [
[gu, en, py],
[po, py, ru],
[po, es]
] ==> [2, 1]
fr, gu, [
[it, fr, de, es, po, jp],
[en, ru, zh, ko],
[jp, th, en],
[th, gu]
] ==> [0, 2, 3]
fr, ru, [
[fr, en],
[en, ko, jp],
[en, ru]
] ==> [0, 2]
de, jp, [
[en, fr],
[ko, jp, zh],
[fr, po],
[es, ko, zh],
[de, en, th],
[en, es],
[de, fr]
] ==> [4, 5, 3, 1]
Правила и предположения
- Применяются стандартные правила ввода-вывода (используйте любой удобный формат ввода-вывода) и запрещенные лазейки.
- Вы можете предположить, что говорение и понимание языков абсолютно симметричны и что все возможные переводы между языками одинаково эффективны.
- Не существует понятия «достаточно близких» языков. Например, недостаточно хорошо использовать португальский на одном конце, где требуется испанский.
- Если существует несколько кратчайших цепочек переводчиков, подойдет любая из них.
- Если послы говорят на одном языке, список переводчиков должен быть пустым
- Кто из послов первый, не имеет значения; список переводчиков может быть прямым или обратным.
- Послы говорят только на одном языке ради этого вызова
- Переводчики говорят как минимум на двух языках
- Двухбуквенные языковые коды не должны соответствовать реальным языкам
- Вы можете предположить, что существует правильная последовательность переводчиков
- Если вы выводите последовательность по значению, включите полный набор доступных языков, а не только соответствующие.
Счастливого гольфа!
источник
en,fr,sp;en,gr;gr,fr
Ответы:
Python 2 ,
138126120117113 байтовПопробуйте онлайн!
3 байта спасибо ArBo
Возвращает список минимальной длины переводчиков как
set
s языков, т. Е. «По значению», изT
которого можноa
разговариватьb
.источник
if t not in U and a in t
можно изменить наif(a in t)>U.count(t)
4 байта.*args
нотацииЖеле ,
1917 байтПопробуйте онлайн!
Диадическая ссылка, принимающая список переводчиков в качестве левого аргумента и список послов (каждый в двойном списке) в качестве правого аргумента. Возвращает список переводчиков, каждый из которых представляет собой список языков, на которых они говорят.
Спасибо @KevinCruijssen за сохранение 2 байта!
объяснение
источник
LÞ
, так как powerset + permurations уже приводит к списку, отсортированному по длине.05AB1E ,
1817 байтВдохновленный ответом Jelly @NickKennedy , так что обязательно проголосуйте за него!
Выводит сами списки вместо их индексов.
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
JavaScript (ES6),
123121 байтОжидаются целые числа вместо 2-буквенных кодов.
Попробуйте онлайн!
источник