Wprowadzenie
Rozważ dwie tablice tej samej długości, powiedz A = [0,1,0,2]
i B = [-1,1,2,2]
. Załóżmy, że wiemy, że ich zawartość jest w pewnym sensie równoważna, pozycja po pozycji:
0
odpowiada-1
,1
odpowiada1
,0
jest równoważne z2
i2
jest równoważne z2
.
Równoważność jest przechodnia: -1
i 0
są równoważne, a 0
i 2
są równoważne, tak -1
i 2
są również równoważne. Zjednoczenie z A
i B
jest tablica, gdzie każdy element A
(lub B
) został zastąpiony przez największą liczbę, która jest równoważna do niego. W takim przypadku unifikacja byłaby [2,1,2,2]
.
Zadanie
Napisz program lub funkcję, która pobierze dwie niepuste tablice liczb całkowitych o równej długości i wyświetli ich unifikację. Możesz także zmodyfikować jedno z wprowadzonych danych zamiast wracać. Wygrywa najniższa liczba bajtów.
Przypadki testowe
[0] [0] -> [0]
[1] [2] -> [2]
[0,-1] [-1,-1] -> [0,0]
[0,1,0] [2,1,0] -> [2,1,2]
[1,2,3] [0,0,1] -> [3,3,3]
[0,1,0,2] [-1,1,2,2] -> [2,1,2,2]
[1,0,1,-4] [-3,-1,-2,2] -> [1,0,1,2]
[1,2,3,-2] [1,0,-3,-2] -> [1,2,3,-2]
[-3,-2,-1,0,1] [-1,-1,-1,-1,-1] -> [1,1,1,1,1]
[-3,-2,-1,0,1] [2,-1,0,1,-3] -> [2,2,2,2,2]
[-3,5,5,3,1] [4,2,3,1,2] -> [4,5,5,5,5]
[4,0,2,-5,0] [0,4,-5,3,5] -> [5,5,3,3,5]
[-2,4,-2,3,2,4,1,1] [-2,4,1,2,2,3,1,-2] -> [1,4,1,4,4,4,1,1]
[-10,-20,-11,12,-18,14,-8,-1,-14,15,-17,18,18,-6,3,1,15,-15,-19,-19] [-13,6,-4,3,19,1,-10,-15,-15,11,6,9,-11,18,6,6,-5,-15,7,-11] -> [-8,14,18,14,19,14,-8,-1,-1,15,14,18,18,18,14,14,15,-1,18,18]
[20,15,2,4,-10,-4,-19,15,-5,2,13,-3,-18,-5,-6,0,3,-6,3,-17] [-18,7,6,19,-8,-4,-16,-1,13,-18,8,8,-16,17,-9,14,-2,-12,7,6] -> [20,15,20,19,-8,-4,20,15,17,20,17,17,20,17,-6,14,15,-6,15,20]
Odpowiedzi:
JavaScript (ES6),
1009011010296 bajtówMoje początkowe rozwiązanie miało 90 bajtów:
Mimo że przechodzi wszystkie dostarczone przypadki testowe, nie udaje się to w przypadku czegoś takiego jak:
Przypadki testowe
Pokaż fragment kodu
źródło
a.map
...a.map
można również zastąpićb.map
.CJam , 27 bajtów
Wypróbuj online! Zestaw testowy.
Wyjaśnienie
źródło
Python 2, 91 bajtów
źródło
Python, 86 bajtów
Jednocześnie aktualizuje obie listy, zastępując każdą wartość na pierwszej liście odpowiednim elementem na drugiej liście, jeśli jest ona większa. Wymiana odbywa się
map
za pomocąget
metody słownika . Następnie zamienia listy i powtarza, aż będą równe.źródło
Pyth, 13 bajtów
Wypróbuj online: demonstracja
Wyjaśnienie:
Zacznij od każdej pary. Iteracyjnie rozszerz każdą parę (listę) o nakładające się listy, deduplikuj elementy i posortuj. Zatrzymaj się, gdy ten proces się zbiegnie. Wydrukuj maksimum każdej listy.
źródło
Php,
266241213200 bajtówRozwiązanie:
Użycie:
u([1,2,3], [0,0,1]);
zwraca żądaną tablicę.Niezbyt golfa:
źródło
Dyalog APL ,
2928 bajtów⌈/¨({∪¨,/∘.{⍵/⍨≢⍺∩⍵}⍨⍵}⍣≡,¨)
Ten sam pomysł, co rozwiązanie Pyth .
źródło
Mathematica, 56 bajtów
źródło
Java,
273263 bajtówMetoda
f(int[]a,int[]b)
rozwiązuje wyzwanie.Najpierw przejdź przez obie tablice i śledź równoważne liczby. Następnie zmodyfikuj każdy element w pierwszej tablicy, aby zapisać równoważne liczby.
źródło
Python, 522 bajty
Wyjaśnienie
Zrób tabelę wartości odpowiadającą każdemu unikalnemu elementowi w obu tablicach (
a
ib
tym przypadku). Na przykład jeśliwtedy tabela będzie:
następnie zastosować głębokość pierwszego wyszukiwania, tak, na przykład, załóżmy, wybiorę skrajny lewy element
a
wartości jest wtedy0
i0
ma przeliczniki:0
a2
. Ponieważ0
został już odwiedzony, przejdź do2
. 2 ma przeliczniki:0
. Zatem najlepszy wynik dla wyboru elementu znajdującego się najbardziej na lewoa
jest2
. Oto drzewo:i chcesz wziąć tam największą wartość, więc wynik jest taki
2
.źródło
PHP, 132 bajty
Anonimowa funkcja, która zajmuje dwie tablice.
To jest moje zdanie na temat „modyfikacji jednej z istniejących tablic”, jak określono w danych wyjściowych wyzwania. Pętla przechodzi przez każdą z dwóch tablic, rejestruje równoważność, jeśli bieżąca jest większa niż zapisana, a następnie zapętla pierwszą tablicę i zastępuje wszystkie wartości ich największymi równoważnikami. Pierwsza tablica jest pobierana przez odniesienie (stąd
&$a
), więc przekazana tablica jest modyfikowana „na miejscu”.źródło
Java, 170 bajtów
Grał w golfa
Bez golfa
Anonimowa funkcja, która przyjmuje dwa
int[]
s jako argumenty i zwraca anint[]
.źródło