Wyzwanie
Twój program powinien przyjąć 3 dane wejściowe:
- Dodatnia liczba całkowita, która jest liczbą zmiennych,
- Zestaw nieuporządkowanych par nieujemnych liczb całkowitych, gdzie każda para reprezentuje równość między zmiennymi, i
- Dodatnia liczba całkowita reprezentująca zmienną początkową,
Powinien zwrócić zestaw nieujemnych liczb całkowitych, które reprezentują wszystkie zmienne, które mogą być tranzytowo równe zmiennej początkowej (w tym samej zmiennej początkowej).
Innymi słowy, wprowadzone dane N
, E
oraz S
, zwraca zestaw Q
, tak że:
S ∈ Q
.- Jeśli
Z ∈ Q
i(Y = Z) ∈ E
wtedyY ∈ Q
. - Jeśli
Z ∈ Q
i(Z = Y) ∈ E
wtedyY ∈ Q
.
Można to również wyrazić jako problem teorii grafów :
Biorąc pod uwagę niekierowany wykres i wierzchołek na wykresie, wypisz listę wierzchołków w jego połączonym składniku .
Dane techniczne
- Możesz wybrać indeksowanie oparte na 0 lub na podstawie 1.
- Pierwsze wejście zlicza liczbę obecnych zmiennych, przy czym zmienne są podawane jako liczby. Alternatywnie, nie możesz wziąć tych danych wejściowych, w którym to przypadku zakłada się, że jest on równy albo najwyższemu obecnemu indeksowi zmiennych, albo o jeden większy, w zależności od twojego schematu indeksowania.
- Możesz założyć, że dane wejściowe są dobrze sformułowane: nie otrzymasz zmiennych poza zakresem określonym przez pierwsze dane wejściowe. Na przykład
3, [1 = 2, 2 = 0], 1
jest poprawnym wejściem, a4, [1 = 719, 1 = 2, 3 = 2], -3
nie jest. - Nie można zakładać, że dowolna zmienna będzie z nią powiązana. Jeśli podano trzecie wejście, które jest „samotne” (nie ma równości), poprawnym wyjściem jest zestaw singletonów zawierający tylko to wejście (ponieważ jest ono równe sobie).
- Możesz założyć, że równości nie będą zawierały równości między zmienną a samą, i że ta sama równość nie zostanie podana wiele razy (obejmuje to takie jak
1 = 2
i2 = 1
). - Możesz założyć, że wszystkie podane liczby całkowite będą w reprezentatywnym zakresie dla twojego języka.
- Drugie wejście możesz pobrać w dowolnym rozsądnym formacie.
Oto kilka rozsądnych formatów:
0 = 2
0 = 3
1 = 0
{(0, 2), (0, 3), (1, 0)}
[0, 2, 0, 3, 1, 0]
0 2 0 3 1 0
Graph[{{0, 2}, {0, 3}, {1, 0}}]
[0 = 2, 0 = 3, 1 = 0]
- Możesz wyprowadzać dane w dowolnym rozsądnym formacie (np. Zestaw, lista itp.). Porządek jest nieistotny.
Punktacja
To jest golf golfowy , więc wygrywa najkrótszy prawidłowy program (w bajtach).
Przypadki testowe (indeksowane 0)
3, [1 = 2, 2 = 0], 1 -> {0, 1, 2}
5, [0 = 2, 0 = 3, 1 = 2], 3 -> {0, 1, 2, 3}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 4 -> {2, 4}
6, [0 = 3, 1 = 3, 2 = 4, 5 = 1], 5 -> {0, 1, 3, 5}
5, [0 = 1, 2 = 0, 0 = 3, 4 = 0], 2 -> {0, 1, 2, 3, 4}
6, [0 = 1, 1 = 2, 2 = 3, 3 = 4, 4 = 5], 3 -> {0, 1, 2, 3, 4, 5}
4, [0 = 1, 1 = 2, 2 = 0], 3 -> {3}
5, [0 = 2, 2 = 4], 2 -> {0, 2, 4}
8, [], 7 -> {7}
Przypadki testowe (indeksowane 1)
3, [2 = 3, 3 = 1], 2 -> {1, 2, 3}
5, [1 = 3, 1 = 4, 2 = 3], 4 -> {1, 2, 3, 4}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 5 -> {3, 5}
6, [1 = 4, 2 = 4, 3 = 5, 6 = 2], 6 -> {1, 2, 4, 6}
5, [1 = 2, 3 = 1, 1 = 4, 5 = 1], 3 -> {1, 2, 3, 4, 5}
6, [1 = 2, 2 = 3, 3 = 4, 4 = 5, 5 = 6], 4 -> {1, 2, 3, 4, 5, 6}
4, [1 = 2, 2 = 3, 3 = 1], 4 -> {4}
5, [1 = 3, 3 = 5], 3 -> {1, 3, 5}
8, [], 8 -> {8}
code-golf
graph-theory
equation
Esolanging Fruit
źródło
źródło
Odpowiedzi:
Brachylog , 22 bajty
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 ,
6563 bajtów-2 bajty dzięki ovs
Wypróbuj online!
źródło
Pyth , 12 bajtów
Zestaw testowy.
źródło
Czysty ,
8581 bajtówWypróbuj online!
Definiuje funkcję
$ :: [[Int]] -> ([Int] -> [Int])
źródło
limit
działaWolfram Language (Mathematica) , 32 bajty
Format wejściowy:
{2<->3, 3<->1}, 3
. Nie przyjmuje pierwszego wejścia.Wypróbuj online!
źródło
Operacja Flashpoint język skryptowy , 364 bajty
Zadzwoń z:
Wynik:
Rozwinięty:
źródło
Python 2 , 53 bajty
Wypróbuj online!
Ta sama długość co funkcja:
Wypróbuj online!
Jest to oparte na dobrym rozwiązaniu Rod wykorzystującym aktualizację zwarciową
b|=b&p and p
. Przyjmowanie liczby zmiennych jako danych wejściowychn
pomaga skrócić kod pętli.źródło
Galaretka ,
121110 bajtów-1 dzięki Eryka Outgolfer (zamiast atomu
œ&
zf
)Dyadyczny link akceptujący
E
po lewej stronie (jako lista długości dwóch list) iS
po prawej stronie (jako liczba całkowita) zwraca listę [zduplikowaną].Wypróbuj online! lub zobacz zestaw testowy .
W jaki sposób?
źródło
œ&
„Sf
” s zwracane wartości zawsze mają tę samą właściwość logiczną.Perl 5
-n0
,4939 bajtówPodaj wartość początkową w wierszu na STDIN, a następnie wiersze par równoważnych liczb (lub podaj wartość początkową na końcu lub w środku lub podaj wiele wartości początkowych, wszystko działa)
Wypróbuj online!
Może to wygenerować element w zestawie wyników wiele razy. Ta 48-bajtowa odmiana generuje każdy równoważny element tylko raz:
Wypróbuj online!
źródło
Rubin , 39 bajtów
Wypróbuj online!
źródło
K (ngn / k) ,
373635 bajtówWypróbuj online!
{
}
funkcja z argumentamix
,y
iz
reprezentującaN
,E
orazS
odpowiednio!x
to lista 0 1 ... x-1&2
jest lista0 0
y,,&2
dodajemy parę,0 0
abyy
uniknąć specjalnego przypadku pustegoy
+y,,&2
to samo przeniesiono z listy par na parę list{
}[+y,,&2]
jest rzutowaniem, tj. funkcją, w którejx
będzie wartością argumentu przekazanego podczas wywoływania+y,,&2
iy
będzie nim|y x
jesty
na indeksachx
, odwrócony (|
)@[y;x;&;|y x]
zmienićy
na indeksachx
, biorąc minimum (&
) z istniejącego elementu i elementu z|y x
/
dzwonić do konwergencjia:
przypisać doa[z]=z
maska boolowska elementówa
równychz
-tym&
przekonwertować maskę logiczną na listę indeksówźródło
Oktawa ,
4845 bajtówPobiera dane wejściowe jako „macierz przylegania”, na przykład używa
[0 0 0; 0 0 1; 1 0 0]
do[2 = 3, 3 = 1]
, spróbuj online!Wyjaśnienie
Najpierw konstruujemy pełną macierz przylegania dla grafu przechodniego, używając sumy
eye(size(A))
(elementy są zwrotne),A
(wejściowej) iA'
(relacja jest symetryczna).Obliczamy zamknięcie przechodnie obliczając moc, do
nnz(A)
której wystarcza (nnz(A)
jest górną granicą długości ścieżki), więc stamtąd pozostaje tylko uzyskanie odpowiedniego wiersza(u,:)
ifind
wszystkich niezerowych wpisów.źródło
Python 2 , 87 bajtów
Wypróbuj online!
źródło
Pari / GP , 80 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 87 bajtów
Deduplikacja byłaby możliwa przy użyciu
&&[...new Set(d[n]||[n])]
kosztu 14 bajtów.źródło