Rozważ dwie posortowane tablice liczb całkowitych i o wielkości odpowiednio i gdzie . Na przykład , .Y m n m < n X = ( 1 , 4 ) Y = ( 2 , 10 , 11 )
Mówimy, że dopasowanie jest jakiś sposób łącząc każdy element z elementem w taki sposób, że żadne dwa elementy są sparowane z tego samego elementu . Koszt dopasowania to tylko suma wartości bezwzględnych różnic w parach.T X T
Na przykład, przy , możemy utworzyć pary które następnie kosztują . Gdybyśmy stworzyli pary koszt wyniósłby . Gdybyśmy stworzyli pary koszt wyniósłby .Y = ( 2 , 10 , 11 ) ( 7 , 2 ) , ( 11 , 10 ) 5 + 1 = 6 ( 7 , 10 ) , ( 11 , 11 ) 3 + 0 = 3 ( 7 , 11 ) , ( 11 , 10 ) 4
Jako inny przykład weźmy , . Możemy wykonać pary za koszt . Pary kosztują .Y = ( 2 , 10 , 11 , 18 ) ( 7 , 2 ) , ( 11 , 10 ) , ( 14 , 11 ) 9 ( 7 , 10 ) , ( 11 , 11 ) , ( 14 , 18 ) 7
Zadanie polega na napisaniu kodu, który przy dwóch posortowanych tablicach liczb całkowitych i oblicza dopasowanie minimalnego kosztu.Y
Przypadki testowe
[1, 4], [2, 10, 11] => [[1, 2], [4, 10]]
[7, 11], [2, 10, 11] => [[7, 10], [11, 11]]
[7, 11, 14], [2, 10, 11, 18] => [[7, 10], [11, 11], [14, 18]]
Odpowiedzi:
Brachylog , 16 bajtów
Wypróbuj online!
Wyjaśnienie
Ponieważ
I
na samym początku ujednolicamy liczbę całkowitą, próbujemy rzeczy od małych wartościI
do dużych wartościI
, co oznacza, że pierwszy raz odniesie sukces w przypadku parowania z najmniejszymi różnicami bezwzględnymi.źródło
Galaretka ,
15 14 1211 bajtówWypróbuj online!
Brutalna siła. Staje wejście jako wówczas .XY X
źródło
L}
działałby zamiast⁹L¤
?ÐṂḢ
->,ÞḢ
aby zapisać bajt.Haskell,
787776 bajtówTIO nie ma
Data.Lists
, więc nie ma linku.Zasadniczo ten sam algorytm jak w odpowiedzi @ dylnan .
Edycja: -1 bajt dzięki @BMO.
źródło
JavaScript (ES7), 121 bajtów
Przyjmuje 2 tablice składni curry
(x)(y)
.Wypróbuj online!
źródło
J , 24 bajty
Wypróbuj online!
Wyjaśnienie / demonstracja:
Czasownik dynamiczny,
x f y
-/
znajduje różnice(0{]#~1>])"1
dla każdego wiersza zachowaj tylko wartości dodatnie i weź pierwszy:[:,@:
spłaszcza listę (aby dopasować kształt lewego argumentu)[-
odejmij min. różnice od lewego argumentu[,.
połącz je z lewym argumentem:źródło
Pyth , 18 bajtów
Wypróbuj tutaj!
źródło
Oktawa , 66 bajtów
Funkcja anonimowy które ma wektorów rzędu
X
,Y
jak wejścia i wyjścia matrycy 2 rzędzie gdzie każda kolumna jest para dopasowania.Wypróbuj online!
źródło
Pyth , 16 bajtów
Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .
źródło
MATL , 16 bajtów
Dane wejściowe są
X
zatemY
.Dopasowanie jest wyprowadzane z pierwszymi wartościami każdej pary (to znaczy
X
) w pierwszym wierszu i drugimi wartościami każdej pary w drugim wierszu.Wypróbuj online! Lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie
źródło
Galaretka , (10?) 12 bajtów
10 bajtów, jeśli wymagane są tylko elementy Y (patrz komentarze) - nie jestem pewien, czy jest to jeszcze dozwolone przez specyfikację (a może nie powinno tak być, ponieważ inne odpowiedzi już implementują ten szczegół).
Można to osiągnąć przez usunięcie końcowego
⁸ż
.Dyadyczny link akceptujący X po lewej i Y po prawej.
(
œc⁹L¤ạS¥ÞḢż@
i 10 bajtówœc⁹L¤ạS¥ÞḢ
robi to samo z Y po lewej i X po prawej).Wypróbuj online!
W jaki sposób?
źródło
JavaScript (ES7), 100 bajtów
Nowy tutaj; wszelkie wskazówki / poprawki będą mile widziane! Poprzednia próba przeoczyła komplikacje związane z sortowaniem tablicy zawierającej
NaN
wartość, więc mam nadzieję, że tym razem niczego nie przeoczyłem.Oczekuje dwa argumenty, X , Y , odpowiednio. Wypróbuj online!
Wydaje się być podobny do rozwiązania @ Arnauld
Wyjaśnienie
Opiera się na tym, że przy danych X , Y są sortowane, istnieje rozwiązanie dopasowania kosztów minimalnych, w którym jeśli wszystkie pary są ułożone w celu zachowania kolejności elementów X , wszystkie elementy Y w układzie również zachowują swoją kolejność.
źródło