Dzięki społeczności PPCG Mikołajowi udało się zregenerować wszystkie prezenty, a po linii montażowej prezenty są teraz gotowe do przeniesienia do doków transportowych!
Każdy z doków transportowych Świętego Mikołaja ma tylko zakres obecnych rozmiarów, ponieważ sanie transportowe są wyspecjalizowane dla określonego rozmiaru (każda lżejsza i byłoby to marnotrawstwem, każda cięższa i sanie nie byłyby w stanie wytrzymać ładunku). Dlatego potrzebuje ciebie, abyś pomógł mu wziąć prezenty i posortować je do odpowiednich doków transportowych.
Wyzwanie
Biorąc pod uwagę listę i zakresy doków transportowych, stabilnie uporządkuj prezenty w odpowiedniej kolejności.
Weźmy na przykład: prezenty są [5, 3, 8, 6, 2, 7]
i zakresy dokowania [[1, 5] and [6, 10]]
.
Prezenty 5
, 3
i 2
iść do pierwszej stacji dokującej i prezenty 8
, 6
i 7
przejść do drugiego doku. Można to pokazać jako [[5, 3, 2], [8, 6, 7]]
. Ta lista będzie bliżej sortowania niż danych wejściowych, ale stably
oznacza, że w każdej stacji dokowania kolejność prezentów musi być taka sama jak kolejność danych wejściowych (w przeciwnym razie możesz po prostu posortować całą listę).
Twój końcowy wynik dla tej sprawy byłby [5, 3, 2, 8, 6, 7]
(jako płaska lista).
Specyfikacja formatowania
Będziesz mieć wkład w postaci płaskiej listy liczb całkowitych i listę zakresów w jakimkolwiek rozsądnym formacie (na przykład zakres powyższym przypadku mogą być podane jako [[1, 5], [6, 10]]
, [1, 5, 6, 10]
, lub [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
). Twój wynik powinien być płaską listą liczb całkowitych w dowolnym rozsądnym formacie.
Dane wejściowe mogą zawierać zduplikowane wartości; w takim przypadku musisz zwrócić wszystkie ich wystąpienia. Wszystkie obecne rozmiary będą dokładnie w jednym zakresie rozmiarów i możesz założyć, że zakresy nigdy się nie pokrywają. Mogą występować przerwy w zakresach, o ile wszystkie obecne rozmiary są objęte zakresem.
Zasady
- Obowiązują standardowe luki
- To jest golf-golf, więc wygrywa najkrótsza odpowiedź w bajtach
- Żadna odpowiedź nie zostanie zaakceptowana
- Możesz założyć, że nie będzie pustych zakresów (
[7, 4]
byłoby niepoprawne, ponieważ zakresy wzrosły)
Przypadki testowe
[1, 2, 3, 4, 5, 6, 7] ; [[1, 3], [4, 7]] => [1, 2, 3, 4, 5, 6, 7]
[1, 2, 3, 4, 5, 6, 7] ; [[4, 7], [1, 3]] => [4, 5, 6, 7, 1, 2, 3]
[7, 3, 5, 4, 6, 1, 2] ; [[1, 3], [4, 5], [6, 7]] => [3, 1, 2, 5, 4, 7, 6]
[4, 7, 6, 3, 5, 2, 1] ; [[1, 4], [5, 7]] => [4, 3, 2, 1, 7, 6, 5]
[1, 1, 3, 3, 6, 4, 7] ; [[1, 4], [6, 7]] => [1, 1, 3, 3, 4, 6, 7]
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 .
źródło
Odpowiedzi:
Haskell , 26 bajtów
Wypróbuj online! Przykładowe użycie:
[1,2,3,4,5,6,7] # [[1,2,3],[4,5,6,7]]
daje[1,2,3,4,5,6,7]
.źródło
Galaretka , 4 bajty
Wypróbuj online!
Pobiera dane wejściowe jako aktualną listę, pełne zakresy.
źródło
fþF
działa również w galarecie , przez 3 bajty . Kredyt trafia do Adnana .Mathematica, 39 bajtów
-22 bajty od JungHwan Min.
-4 bajty od Martina
Wypróbuj online!
źródło
Range
rzeczy, biorąc po prostu rozszerzone zakresy jako dane wejściowe.Pyth , 5 bajtów
Wypróbuj tutaj!
Pyth , 10 bajtów
Wypróbuj tutaj!
Jak oni pracują
Najpierw pobiera doki ze wszystkimi liczbami całkowitymi w zakresach, a następnie prezenty w nowej linii.
źródło
Python 2 ,
4946 bajtówdzięki @HyperNeutrino za -3 bajty
Wypróbuj online!
Nie golfił
Wypróbuj online!
źródło
05AB1E , 3 bajty
Wypróbuj online! (podziękowania dla Adnana za poinformowanie mnie o
δ
istnieniu, -1 bajt)Jak to działa
źródło
€Ã˜
nie działa.€Ã˜
niepowodzenia jest to, żeÃ
bierze dwa argumenty i€
oczekuje funkcji z jednym argumentem, więc zwraca[[]]
zamiast tego (myślę, że to błąd), więc wtedy˜
spłaszczy się, powróci[]
.ε
działa jednak inaczej. Dla każdego elementu najwyższego elementu tworzy nowy stos, a następnie zwraca górę każdego nowego stosu, więc jeśli nie ma w nim wystarczającej liczby elementów dla funkcji, pobiera niejawne dane wejściowe.δØ
czy szukasz tego?Siatkówka ,
3736 bajtówWypróbuj online! Pobiera dane wejściowe jako listę prezentów w pierwszym wierszu i listę zakresów w drugim wierszu; link zawiera nagłówek umożliwiający podział przypadków testowych na żądany format. Edycja: Zapisano 1 bajt dzięki @MartinEnder. Objaśnienie: Pierwszy etap dopasowuje prezenty i znajduje pasującą stację dokującą. Prezenty są sortowane według podciągów od początku linii do
[
, w ten sposób grupując prezenty według doku. Drugi etap usuwa następnie doki.źródło
Zapisz , 3 bajty
Wypróbuj online!
Jak to działa
źródło
APL + WIN, 29 bajtów
Monity o wprowadzenie ekranu dla liczb całkowitych i zakresów. Liczby całkowite jako płaska lista, a zakresy jako wektor zagnieżdżony, np. Przypadek 3:
Wyjaśnienie:
źródło
C ++, 127 bajtów
Weź dane jako dwie tablice reprezentowane przez pary wskaźników
[start, end)
.Wypróbuj online!
źródło
[&](int a)->int{a=a>=
zamiast[&](int a){return a>=
nie zapisuje żadnych bajtów. /#import<algorithm>
może być#import<regex>
, przynajmniej na TIO. Odkryłem, że po wyczerpującym wyszukiwaniu („ręczne wyszukiwanie binarne”) wszystkie nagłówki wymienione na tej stronie, a ta jest najkrótsza. / Również +1 ode mnie.J, 15 bajtów
Traktuje dane wejściowe jako lewy argument, a zakresy jako prawy argument. Zakresy to pudełkowe listy pełnych zakresów.
np. dla pierwszego zakresu:
Wypróbuj online!
Wyjaśnienie
źródło
J ,
2624 bajtów2 bajty dzięki Cole
Jak to działa:
Lewy argument zawiera zakresy.
-&1 0"1@[
zmniejsza dolną granicę każdego zakresu o 1I."1]
sprawdza, w jakim zakresie pasuje do każdego prezentu1=
czy jest w prawidłowym zakresie?]<@#~
kopiuje i umieszcza prezenty w bieżącym zakresie;
- Raze (rozpakowanie)Wypróbuj online!
źródło
(0 4,:_3 _1) f _2 _1 0 1 2
)R ,
113485541 bajtówPoprzednia wersja nie sortowała poprawnie obiektów, gdy doki nie były w porządku rosnącym.
Wypróbuj online!
Przyjmuje się
D
jako listę wektorów zakresów, tj.list(4:7,1:3)
Byłoby[[4, 7], [1, 3]]
.Prawdopodobnie naiwna odpowiedź, na którą powinienem był odpowiedzieć przed wiekami; drukuje na standardowe wyjście.
źródło
Japt , 6 bajtów
Spróbuj
Wyjaśnienie
Domniemane wprowadzanie tablicy
U
(przedstawia) i tablicy 2dV
(pełne zakresy). Sortuj (ñ
) prezenty, przepuszczając je przez funkcję (@
), która pobiera indeks pierwszego elementu (b
),V
który zawiera (ø
) bieżącą teraźniejszość (X
).źródło
Python 2,
9785 bajtów-11 bajtów z ovs
-1 bajt od pana Xcodera
Wypróbuj online!
Sortuje listę za pomocą rekurencyjnej lambda jako klucza. Wyjaśnienie
wkrótce ™poniżej.Wyjaśnienie:
źródło
JavaScript ES6,
534745 bajtówWypróbuj online!
źródło
PowerShell , 37 bajtów
Wypróbuj online!
Przyjmuje się
$a
jako dosłowną tablicę prezentów i$b
tablicę, z których każda ma pełny zakres (np.@(1,2,3,4,5)
Zamiast@(1,5)
). Następnie zapętlamy każdy element za$b
pomocą|%{...}
. Wewnątrz musimy ustawić pomocnika,$i
aby był bieżącym przedmiotem, a następnie użyćWhere-Object
klauzuli przeciwko,$a
aby wyciągnąć tylko te przedmioty, które są-in
bieżącą$b
tablicą.Pozostają one w przygotowaniu, a dane wyjściowe są niejawne. Ponieważ domyślne zachowanie
Write-Output
wstawia nową linię między elementami tablicy, otrzymujemy to. Oto nieco ulepszona wersja, która jest-join
edytowana razem przecinkami zamiast nowego wiersza, tylko w celu pokazania różnic.źródło
Czerwony , 73 bajty
Wypróbuj online!
źródło
C # (.NET Core) , 50 + 18 bajtów
+18 bajtów z
Pobiera kolekcję prezentów i kolekcję tablic do doków.
Wypróbuj online!
źródło
Windows Batch (CMD),
9079 bajtówUżyj formatu końca linii LF. Każdy znak końca wiersza może być liczony jako 1 bajt.
Brak TIO (ponieważ TIO używa Linuksa)
Weź listę z argumentów wiersza poleceń i zakres od
stdin
.Na przykład, jeśli program jest uruchomiony (załóżmy, że plik ma nazwę
r1.cmd
)i z
stdin
wejściem, program wyświetli
stderr
format w formacie(odpowiada sekwencji wyjściowej
3 1 2 5 4 7 6
)Wyjaśnienie:
Nieskluczony kod (z włączoną interakcją, jeśli
true
jest przekazywany jako argument 1; monit o listę zstdin
, użyj,goto
aby uniknąć przepełnienia stosu - w rzeczywistości próbowałem uruchomić skrypt, który wywołuje się ponad 70000 razy, nie widząc żadnego problemu, więc myślę, że powinno być całkiem bezpieczne):źródło
(%*)
. Po wykonaniu tej czynności możesz%0 %*
ponownie uruchomić skrypt po przetworzeniu każdego zakresu. (I rzeczywiście skończyło się z większej liczby bajtów, ponieważ użyłem interaktywną wersję z miłych akcentów&&
,exit/b
aecho
jako punkt wyjściowy.)%1
ale cudzysłowy"
sprawiają, że przestrzeń nie działa jako separatory, więc ostatecznie skończyłemset /p
.$~1
...Czysty , 59 bajtów
Wypróbuj online!
Pobiera dwie listy, zwraca listę.
źródło
Wolfram Language (Mathematica) , 34 bajty
Wypróbuj online!
jestFunction
operatorem.Jest to nienazwana funkcja curry, którą należy wywołać najpierw z listą (rozszerzonych) zakresów dokowania, a następnie z listą prezentów. Na przykład, jeśli przypiszesz funkcję do
f
:Lista prezentów jest posortowana według pozycji pierwszego poziomu wartości na liście zakresów dokowania. Musimy zawinąć
SortBy
funkcję w listę, aby sortowanie było stabilne.źródło
Julia 0.6 ,
3130 bajtówWypróbuj online!
Redefiniuje
%
operatora i odwzorowuje ustawione skrzyżowanie∩()
nad dokami,d
zachowując porządek i mnożnik pierwszego imputu, listy prezentówp
.vcat
z danymi wejściowymi rozszerzonymi do wielu argumentów za pośrednictwem...
spłaszczenie wynikowej zagnieżdżonej tablicy.Edytuj, -1Byte: Zrozumienie listy zamiast
map()
.źródło