Matematyka von Koch możesz poznać po jego słynnym płatku śniegu. Ma jednak bardziej interesujące problemy z informatyką. Rzeczywiście, spójrzmy na to przypuszczenie:
Biorąc pod uwagę drzewo z n
węzłami (a więc n-1
krawędziami). Znajdź sposób wyliczenia węzłów1
do n
i odpowiednio krawędzi od 1
do n-1
w taki sposób, aby dla każdej krawędzi k
różnica numerów węzłów była równa k
. Przypuszcza się, że jest to zawsze możliwe.
Oto przykład, aby wyjaśnić to doskonale:
TWOJE ZADANIE
Twój kod weźmie jako dane wejściowe drzewo, możesz wziąć żądany format, ale dla przypadków testowych dostarczę drzewo według ich łuków i listy ich węzłów.
Na przykład jest to dane wejściowe dla drzewa na obrazku:
[a,b,c,d,e,f,g]
d -> a
a -> b
a -> g
b -> c
b -> e
e -> f
Twój kod musi zwrócić drzewo z numerami węzłów i krawędzi. Możesz zwrócić bardziej graficzny wynik, ale przedstawię tego rodzaju dane wyjściowe dla przypadków testowych:
[a7,b3,c6,d1,e5,f4,g2]
d -> a 6
a -> b 4
a -> g 5
b -> c 3
b -> e 2
e -> f 1
PRZYPADKI TESTOWE
[a,b,c,d,e,f,g] [a7,b3,c6,d1,e5,f4,g2]
d -> a d -> a 6
a -> b a -> b 4
a -> g => a -> g 5
b -> c b -> c 3
b -> e b -> e 2
e -> f e -> f 1
[a,b,c,d] [a4,b1,c3,d2]
a -> b a -> b 3
b -> c => b -> c 2
b -> d b -> d 1
[a,b,c,d,e] [a2,b3,c1,d4,e5]
a -> b a -> b 1
b -> c b -> c 2
c -> d => c -> d 3
c -> e c -> e 4
To jest golf-golf to najkrótsza odpowiedź w bajtach wygrana!
Uwaga: Jest to silniejsze niż przypuszczenie Ringela-Kotziga , które mówi, że każde drzewo ma pełne wdzięku oznaczenie. Ponieważ w przypuszczeniu Kocha nie można pominąć liczb całkowitych oznaczenia, w przeciwieństwie do wdzięcznego oznaczenia w przypuszczeniu Ringel-Kotzig. Wcześniej proszono o pełne wdzięku etykietowanie .
źródło
Odpowiedzi:
Galaretka , 30 bajtów
Wypróbuj online!(Użyj
GṄ³çG
jako stopki, aby wydruk był ładniejszy.)Dane wejściowe podobne do przykładu, np
abcdef
I[d,a],[a,b],[a,g],[b,c],[b,e],[e,f]
Wyświetla listę, np
a,b,c,d,e,f
W kolejności.Uwaga: Mój program generuje wartości inne niż przypadki testowe, ponieważ istnieje kilka ważnych opcji.
Wyjaśnienie
Zaoszczędź 1 bajt, pokazując wszystkie możliwe rozwiązania:
Wypróbuj online! (Użyj
GṄ³çG⁷³G
jako stopki, aby wydruk był ładniejszy)Użyj konwertera, aby skopiować i wkleić przypadek testowy do listy danych wejściowych.
źródło
Rubinowy, 108 bajtów
funkcja lamba, akceptuje tablicę 2-elementowych tablic zawierających krawędzie (gdzie każda krawędź jest wyrażona jako para liczb odpowiadających odpowiednim nutom).
Niegolfowany w programie testowym
Wynik
dane wyjściowe to tablica 2-elementowa zawierająca:
nowa numeracja węzłów
numeracja krawędzi.
Na przykład pierwsza krawędź pierwszego przykładu
[4,1]
znajduje się między węzłami 6 i 1 pod nową numeracją węzłów, a zatem ma krawędź 6-1 = 5.W rzeczywistości istnieje wiele rozwiązań dla każdego przypadku testowego.
return
zatrzymanie funkcji raz pierwszy znaleziono.źródło