Będziesz mieć dwie tablice / lists / wektory liczb całkowitych nieujemnych A i B . Twoim zadaniem jest wyjście najwyższa liczba całkowita N , który pojawia się zarówno A i B , a także jest wyjątkowy zarówno A i B .
Możesz założyć, że istnieje co najmniej jeden taki numer.
Dowolna uzasadniona metoda / format wejścia i wyjścia jest dozwolona.
Te luki są zabronione.
To jest golf golfowy , więc wygrywa najkrótszy kod w każdym języku programowania!
Przypadki testowe:
A, B -> Dane wyjściowe [6], [1, 6] -> 6 [1, 2, 3, 4], [4, 5, 6, 7] -> 4 [0, 73, 38, 29], [38, 29, 73, 0] -> 73 [1, 3, 4, 6, 6, 9], [8, 7, 6, 3, 4, 3] -> 4 [2, 2, 2, 6, 3, 5, 8, 2], [8, 7, 5, 8] -> 5 [12, 19, 18, 289, 19, 17], [12, 19, 18, 17, 17, 289] -> 289 [17, 29, 39, 29, 29, 39, 18], [19, 19, 18, 20, 17, 18] -> 17 [17, 29, 39, 29, 29, 39, 18, 18], [19, 19, 18, 20, 17, 18] -> 17
źródło
[email protected]/d
) i przyjmuję dane wejściowe jako listę dwóch list.Python 3 ,
615654 bajtówZaoszczędzono 7 bajtów dzięki @ Mr.Xcoder , @ pizzapants184 i @ovs
Wypróbuj online!
źródło
05AB1E ,
98 bajtów-1 bajt dzięki Erik the Outgolfer
Wypróbuj online!
źródło
Łuska , 7 bajtów
Pobiera dane wejściowe jako listę dwóch list, działa również na dowolną liczbę list (zwracając najwyższą liczbę, która występuje dokładnie w każdej z nich, jeśli to możliwe). Wypróbuj online!
Wyjaśnienie
Jest to pierwsza odpowiedź Łuski na (ab) użycie nowej funkcji „maksimum do”
►
.źródło
Bash + coreutils, 60 bajtów
Wypróbuj online
Bash, 89 bajtów
TIO
źródło
sort -rn
zesed q
na koniec zamiasttail -1
do golenia 1 bajt. Świetne znalezisko zgrep -wf
btw. +1Galaretka , 11 bajtów
Wypróbuj online!
źródło
`
!J, 23 bajty
(-.-.@~:#])
usuwa z listy wszelkie powtarzające się elementy&
zrób to z obydwoma argumentami([-.-.)
Chcemy przecinać B. Jest to równoważne zdanie: „A minus (A minus B)”>./
Weź maksWypróbuj online!
źródło
e.~#]
. Gra w golfa okazała się trudna ... Próbowałem użyć/.
klawisza bezskutecznie (((1=#)/.~#~.)
dla pierwszej części, która według mnie jest o 2 bajty dłuższa)PowerShell , 94 bajty
Wypróbuj online!
Pobiera dane wejściowe
$a
i$b
jako tablice. Tworzyfilter
togroup
S elementy tablicy wejście razem i ciągnie się tylko te zcount
-eq
UAL do1
(czyli takie, które są unikalne w tablicy wejściowego).Następny wiersz konstruuje algorytm. Najpierw
sort
$a
wyciągamy te, które są-in
unikatowymi przedmiotami$b
. Są one wtedy same w sobie wyjątkowe,[-1]
wybierana jest największa , a my bierzemy to.Name
. Pozostaje to w potoku, a dane wyjściowe są niejawne.źródło
JavaScript (ES6),
102867571 bajtówDzięki @justinMariner za uzyskanie od 102 do 86
Dzięki @tsh za przejście z 86 na 75
Dzięki @Arnauld za przejście z 75 na 71
Wypróbuj online!
źródło
e
pojawi się tylko raz wa
ib
.lastIndexOf
takim użyciu , to całkiem sprytne. Możesz zmniejszyć to do 86 bajtów: Wypróbuj online! . Sprawdź wskazówki JS, aby uzyskać więcej.(g=x=>x.filter(y=>y==e).length==1)
jest krótsze.Haskell ,
5753 bajtówWypróbuj online!
UPD: Dzięki @Laikoni
źródło
f
jako operator infix i pisać[1|...]==[1]
zamiastsum[1|...]==1
zapisywać niektóre bajty.!
zand
oszczędza jeszcze dwa bajty: Wypróbuj online!Wolfram Language (Mathematica) , 40 bajtów
Wypróbuj online!
Jak to działa
Tally@#
podaje listę unikalnych elementów pierwszego wejścia wraz z ich liczbą: np .Tally[{2,2,2,6,3,5,8,2}]
daje{{2,4},{6,1},{3,1},{5,1},{8,1}}
.Tally@#2
robi to samo dla drugiej listy i⋂
znajduje pary obecne w obu. Następnie wybieramy (zCases
) parami kończącymi się na1
, biorąc pierwszy element każdego wyniku, co daje nam listę wszystkich unikalnych bliźniaków. WreszcieMax
zwraca największy unikalny bliźniak.źródło
Röda , 48 bajtów
Wypróbuj online!
Zainspirowany odpowiedzią jq jq170727 .
Wyjaśnienie:
źródło
F # (.NET Core) ,
117115114111108 bajtów115114 bajtówKolejne rozwiązanie z
countBy
tym czasem:Wypróbuj online!
117111 bajtówWypróbuj online!
100% F #! Każda pomoc jest mile widziana!
6 bajtów wygranych dzięki notacji prefiksowej!
108 bajtów
@
jest funkcją concat! Dziękuję @ Ayb4btu za ten algorytm.Wypróbuj online!
źródło
C # (.NET Core) ,
8584 bajtówWypróbuj online!
Naiwne rozwiązanie z LINQ (
using System;using System.Linq;
+ 31 znaków, więc 116 bajtów z nagłówkiem)84! Zapomniałem curry!
źródło
Pip ,
1716 bajtówJest to funkcja, która przyjmuje dwie listy jako argumenty. Wypróbuj online!
Wyjaśnienie
źródło
APL (Dyalog) , 18 znaków = 23 bajty *
Pełny korpus programu. Monity o listę list z STDIN. Działa z dowolną liczbą list. Wyjścia do STDOUT.
Wypróbuj online!
⎕
monit o ocenę danych wejściowych z STDIN{
…}⌸¨
Dla każdej listy wywołaj następującą funkcję dla każdego unikalnego elementu na tej liście, używając unikalnego elementu jako lewego argumentu (⍺
) i listy indeksów jego występowania jako prawego argumentu (⍵
):≢⍵
suma indeksów (tj. liczba wystąpień)1=
równa 1⍺⍴⍨
użyj tego, aby zmienić kształt konkretnego elementu (tj. daje pustą listę, jeśli nie jest unikalna)Teraz mamy dwie listy unikalnych elementów dla każdej listy wejściowej (chociaż każdy element jest listą, i istnieją puste listy jako pozostałości z elementów nieunikalnych).
∩/
skrzyżowanie (redukcja)∊
ϵ nlist (spłaszczyć)⌈/
max (redukcja)* w wersji Classic, licząc
⌸
jako⎕U2338
.źródło
MATL , 13 bajtów
Wypróbuj online! Lub Zweryfikuj wszystkie przypadki testowe .
Wyjaśnienie
źródło
PHP, 98 bajtów
Podaj tablice jako parametry GET
a
ib
.źródło
Java 8, 133 bajty
Wyjaśnienie:
Wypróbuj tutaj.
źródło
R , 73 bajty
Wypróbuj online!
Obliczenia
A
przecinają sięB
, a następnie maksymalna różnica między tym a zduplikowanymi elementamiA
iB
.źródło
JavaScript ES5,
122121114 bajtówJestem tu nowy, więc tak naprawdę nie wiem, czy mogę usunąć definicję funkcji i po prostu umieścić jej zawartość (co zaoszczędziłoby mi 17 bajtów)
Oto działający przykład:
122121114122 do 121 bajtów: Zawijanie inicjalizacji w a
121 do 114 bajtów:
b
musi to być ciąg znakówźródło
b
i zapisaćb=''+b,
?f=(a,b)=>{for(b=''+b,i=a.sort().length;--i+1;)if(a[i]!=a[i+1]&&a[i]!=a[i-1]&&!(b.split(a[i]).length-2))return a[i]}
.SQLite , 118 bajtów
Wypróbuj online!
Po raz pierwszy w SQL pomoc jest mile widziana!
źródło
Jq 1,5 , 76 bajtów
Rozszerzony
Wypróbuj online!
Oto inne rozwiązanie o tej samej długości:
Rozszerzony
Wypróbuj online!
źródło
APL, 47 bajtów
Deklaruje anonimową funkcję, która pobiera dwa wektory, eliminuje duplikaty elementów, a następnie znajduje największy element na przecięciu wyników.
A←⍺
iB←⍵
przechowuj argumenty przekazane do funkcji wA
iB
.a=b
zwraca wektor z 1 w każdym indeksie, w któryma
jest równab
. Jeślia
jest skalarem (tj. Pojedynczą wielkością, a nie wektorem), to zwraca wektor z 1, gdziekolwiek elementb
jest,a
i 0, gdy nie jest. Na przykład:{+/⍵=A}
: zagnieżdżona funkcja anonimowa; znajdź wystąpienia argumentu w wektorzeA
i dodaj je, tj. znajdź liczbę wystąpień argumentu wA
1={+/⍵=A}¨A
: zastosuj zagnieżdżoną funkcję anonimową do każdego elementu w A i znajdź te, które są równe 1, tj. unikalne elementy((1={+/⍵=A}¨A)/A←⍺)
: po znalezieniu położenia unikalnych elementów wybierz tylko te elementy w oryginalnym wektorze (/
wybiera z prawego elementu argumentu, którego położenie odpowiada 1 w lewym argumencie)R←((1={+/⍵=A}¨A)/A←⍺)∩(1={+/⍵=B}¨B)/B←⍵
: powtórz proces dla drugiego argumentu; teraz, gdy mamy tylko unikalne elementy, znajdź przecięcie, tj. wspólne elementy i zapisz je w wektorzeR
R[⍒R]
: dostęp do elementówR
w malejącej kolejności1↑R[⍒R]
: weź pierwszy elementR
po posortowaniu w malejącej kolejnościPrzypadek testowy:
źródło
J , 30 bajtów
Jak to działa:
Zaczynam od testowania, w którym dwie listy nakładają się na siebie
=/
(wstawia test równości między wszystkimi członkami list:Więcej niż jeden 1 w tej samej kolumnie oznacza, że liczba nie jest unikalna dla lewego argumentu (w tym przypadku 6); w rzędzie - dla właściwego argumentu (3)
Następnie sumuję wszystkie wiersze i wszystkie kolumny, aby znaleźć, gdzie są duplikaty:
Znajduję iloczyn kartezjański z powyższych list i ustawiam członków na wartości większe niż 1 na 0.
Maskuję macierz równości c za pomocą m, aby znaleźć unikalne elementy wspólne dla obu list i pomnożyć przez to lewy argument.
Następnie spłaszczam listę i znajduję element max:
Wypróbuj online!
źródło
C # (.NET Core) ,
66 + 31 = 9765 + 31 = 96 bajtówWypróbuj online!
+31 bajtów dla
using System;using System.Linq;
Czerpałem inspirację z odpowiedzi @ aloisdg. Jednak zamiast szukać unikalnych wartości w obu tablicach, odwróciłem kolejność operacji, tak że
intersect
jest to pierwsza, a następnie znajduję maksymalną wartość elementów, które występują dwa razy, gdy tablice są konkatenowane i znajdują się na przecięciu. Mogę użyć<3
jakCount
będzie co najmniej 2 dla dowolnej wartości, tak jak będzie w obu tablicach.Podziękowanie
-1 bajt dzięki @aloisdg i jego sugestii używania
Func
curry.źródło
Oktawa ,
5756 bajtówAnonimowa funkcja, która przyjmuje jako dane wejściowe tablicę komórek dwóch tablic numerycznych.
Wypróbuj online!
Wyjaśnienie
Dla każdej (
cellfun(@(x)...)
) z dwóch tablic wejściowych tworzy to macierz porównań równości par pomiędzy jej wpisami (x.'==x
); utrzymuje (x(...)
) tylko wpisy, dla których suma kolumn to1
(sum(...)==1
); i pakuje wynik do komórki ({...}
). Obliczane jest przecięcie (intersect
) dwóch wyników ({:}
) imax(...)
przyjmowane jest maksimum ( ).źródło
Wolfram Language (Mathematica) , 49 bajtów
Wypróbuj online!
źródło