Dzięki społeczności PPCG Święty Mikołaj zbalansował swoje wózki do przechowywania. Teraz musi przenieść je do doków transportowych, aby mogły zostać wysłane do ładowni. Niestety ślady do przemieszczania wózków to bałagan, a on musi wymyślić, jak je wszystkie omijać, nie rozbijając się razem!
Wyzwanie
Otrzymasz ścieżki dla każdego z wózków jako listy „etykiet” (lub stacji). Wózki muszą być przemieszczane w taki sposób, aby w żadnym czasie żadne dwa wózki nie znajdowały się na tej samej etykiecie / stacji. Zasadniczo wózki przemieszczają się między pozycjami, z których każda ma unikalną etykietę.
Zadanie
Biorąc pod uwagę ścieżki dla każdego z wózków jako listę list etykiet (które są dodatnimi liczbami całkowitymi), określ, kiedy każdy wózek powinien zostać zwolniony, aby bezpiecznie wysłać wszystkie wózki do ich miejsc docelowych w możliwie najkrótszym czasie.
Oto wyjaśnienie działania całego systemu gąsienic. Powiedzmy, że koszyk i
wypuszczany jest t_i
na tor z etykietami T_i_1, T_i_2, ..., T_i_n
. Następnie, podczas t_1
do t_i-1
, wózek i
nie znajduje się na siatce i można go zignorować.
W ramce czasowej t_i
wózek jest na etykiecie T_i_1
, a dla każdej ramy czasowej t_k
od t_i
do t_i+n
(w połowie włącznie) wózek jest na etykiecie T_i_k+1
.
Dla wszystkich przedziałów czasowych po uwzględnieniu t_i+n
koszyk znajduje się w miejscu docelowym i nie znajduje się już na planszy.
Całkowity czas t_T
zajmuje ostatni przedział czasowy, w którym wózek nadal znajduje się na torze w systemie.
Dane techniczne
Biorąc pod uwagę system torów, zwróć listę przedziałów czasowych, w [t_1, t_2, ..., t_n]
których i
wózek rozpoczyna się w czasie t_i
, tak aby żadne inne ustawienie nie pozwoliło wózkom bezpiecznie dotrzeć do miejsca docelowego przy mniejszym całkowitym czasie.
Jeśli chodzi o „bezpiecznie”, jeśli w dowolnym przedziale czasowym od t_1
do t_T
więcej niż jednego wózka na dowolnej etykiecie, kolidują ze sobą, a układ nie był „bezpieczny”. Należy zauważyć, że dwa wózki mogą przejść od a, b
celu b, a
i wciąż być „bezpieczne”, bo tory są 2-drożny.
Specyfikacja formatowania
Dane wejściowe będą podawane jako macierz dodatnich liczb całkowitych w dowolnym rozsądnym formacie. Dane wyjściowe należy podać jako listę liczb całkowitych dodatnich w dowolnym rozsądnym formacie. Możesz podać dane wyjściowe w przedziałach czasowych indeksowanych od zera, więc wynikiem będzie lista liczb całkowitych nieujemnych w dowolnym rozsądnym formacie.
Zasady
- Obowiązują standardowe luki
- To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach
- Żadna odpowiedź nie zostanie zaakceptowana
Przypadki testowe
Input -> Output
[[1, 2, 3], [4, 5, 6], [7, 8, 9]] -> [1, 1, 1]
[[1, 2, 3], [1, 2, 3]] -> [1, 2]
[[1, 2, 3], [3, 2, 1]] -> [1, 2]
[[1, 2, 3, 4], [4, 3, 2, 1]] -> [1, 1]
[[1, 1, 1], [1, 1, 1]] -> [1, 4]
[[1, 2, 3, 4], [2, 4, 3, 1]] -> [2, 1]
[[1, 2, 3, 4, 5, 6, 7], [2, 3, 3, 4], [5, 4, 3]] -> [1, 3, 4]
[[1, 2, 3, 4, 4], [1, 2, 3, 5, 4], [1, 2, 3, 4, 5]] -> [2, 3, 1]
Uwaga: Inspirację do tej serii wyzwań czerpałem z Advent Of Code . Nie mam powiązań z tą stroną
Możesz zobaczyć listę wszystkich wyzwań w serii, patrząc na sekcję „Połączone” pierwszego wyzwania tutaj .
Wesołego golfa!
źródło
Odpowiedzi:
JavaScript (ES7), 172 bajty
Zwraca tablicę przedziałów czasowych o indeksie 0.
NB : Może to działać tylko z etykietami w [0-31]. Jest to limit JS, a nie limit algorytmu.
Przypadki testowe
Pokaż fragment kodu
Skomentował
źródło
<<
i|
) Można to naprawić za pomocą tablicy bool zamiast ...o[]
. (Rzeczywiście można to zrobić inaczej, ale wybrałem tę metodę przede wszystkim dla golfistów.)