Dwóch ambasadorów na konferencji ONZ chce ze sobą rozmawiać, ale niestety każdy z nich mówi tylko jednym językiem - i to nie jest ten sam język. Na szczęście mają dostęp do kilku tłumaczy, którzy rozumieją i mówią w kilku językach. Twoim zadaniem jest określenie najkrótszego łańcucha tłumaczy (ponieważ chcesz, aby jak najmniej zagubić się w tłumaczeniu), który pozwoli dwóm ambasadorom rozmawiać ze sobą.
Kodowanie
Dane wejściowe: dwa języki jako dwuliterowe ciągi małych liter (język każdego ambasadora) i lista list języków (jedna lista na jednego tłumacza)
Alternatywnie możesz przyjmować liczby całkowite zamiast kodów dwuliterowych.
Wynik: sekwencja tłumaczy według indeksu lub wartości, która jest jednym z najkrótszych łańcuchów tłumaczy, który pozwala dwóm ambasadorom na komunikację. Jeśli nie ma prawidłowego łańcucha tłumaczy, zachowanie jest niezdefiniowane. (Możesz zawiesić się, wypisać dowolną wartość lub wskazać błąd)
Prawidłowy łańcuch tłumaczy to taki, w którym pierwszy tłumacz mówi jednym językiem ambasadora, drugi i późniejsi tłumacze dzielą co najmniej jeden język z poprzednim tłumaczem, a ostatni tłumacz mówi językiem drugiego ambasadora.
Przykłady
Korzystanie z indeksowania zerowego:
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]
Zasady i założenia
- Obowiązują standardowe zasady We / Wy (użyj dowolnego wygodnego formatu We / Wy) i zabronione luki.
- Możesz założyć, że mówienie i rozumienie języków jest idealnie symetryczne i że wszystkie możliwe tłumaczenia między językami są równie wydajne.
- Nie ma koncepcji języków „wystarczająco blisko”. Na przykład używanie języka portugalskiego na jednym końcu, gdzie wymagany jest hiszpański, nie jest wystarczające.
- Jeśli istnieje wiele najkrótszych łańcuchów tłumacza, wystarczy jeden z nich.
- Jeśli ambasadorowie mówią tym samym językiem, lista tłumaczy powinna być pusta
- Który z ambasadorów jest pierwszy, nie ma znaczenia; lista tłumaczy może być do przodu lub do tyłu.
- Ambasadorowie mówią tylko jednym językiem ze względu na to wyzwanie
- Tłumacze mówią co najmniej dwoma językami
- Dwuliterowe kody języków nie muszą odpowiadać rzeczywistym językom
- Możesz założyć, że istnieje poprawna sekwencja tłumaczy
- W przypadku wyświetlania sekwencji według wartości należy uwzględnić pełny zestaw dostępnych języków, a nie tylko odpowiednie.
Wesołego golfa!
źródło
en,fr,sp;en,gr;gr,fr
Odpowiedzi:
Python 2 ,
138126120117113 bajtówWypróbuj online!
3 bajty dzięki ArBo
Zwraca listę tłumaczy o minimalnej długości jako
set
s języków, tzn. „Według wartości”, zT
których pozwalająa
rozmawiaćb
.źródło
if t not in U and a in t
można zmienić,if(a in t)>U.count(t)
aby zapisać 4 bajty.*args
notacjiGalaretka ,
1917 bajtówWypróbuj online!
Dyadyczny link przyjmujący listę tłumaczy jako lewy argument i listę ambasadorów (każdy podwójnie zawinięty na liście) jako prawy argument. Zwraca listę tłumaczy, z których każdy jest listą języków, którymi mówią.
Dzięki @KevinCruijssen za oszczędność 2 bajtów!
Wyjaśnienie
źródło
LÞ
, ponieważ zestaw power + permurations już daje listę posortowaną według długości.05AB1E ,
1817 bajtówZainspirowany @NickKennedy „s Jelly odpowiedzi , więc upewnij się, aby go upvote!
Generuje same listy zamiast ich indeksów.
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
JavaScript (ES6),
123121 bajtówOczekuje liczb całkowitych zamiast kodów dwuliterowych.
Wypróbuj online!
źródło