Napisz program, który znajdzie nieunikalne elementy tablicy liczb całkowitych ze znakiem. Powstała tablica może być w dowolnej kolejności.
Twoja odpowiedź może być fragmentem, który zakłada, że dane wejściowe są przechowywane w zmiennej ( d
powiedzmy) i ocenia poprawny wynik.
Przypadki testowe
Każdy przypadek testowy jest pojedynczą linią w formacie input => output
. Zauważ, że inne kombinacje danych wyjściowych są również poprawne.
[] => []
[-1, 0, 1] => []
[1, 1] => [1]
[3, 0, 0, 1, 1, 0, 5, 3] => [3, 0, 1]
[-34, 0, 1, -34, 4, 8, 4] => [-34, 4]
Kolejność elementów nie ma znaczenia.
To jest kod golfowy, więc wygrywa najkrótsza odpowiedź (w bajtach).
code-golf
array-manipulation
counting
garg10may
źródło
źródło
[-1, 0, 1]
, można wejściowy (wymienić \ n, nowa linia):"-1\n0\n1"
?Odpowiedzi:
K5 , 5 bajtów
Zakładając, że wejście jest już w zmiennej o nazwie
d
,Weź odrębne elementy (
?
) z wyjątkiem (d^
) odrębnych elementów d (?d
). Ładnie symetryczne, nie? Działa to, ponieważ operator „oprócz” usuwa tylko pierwsze wystąpienie prawego argumentu z lewego argumentu.Bardziej ogólnie,
W akcji:
Edytować:
Gdybyśmy chcieli zachować kolejność pierwszego wystąpienia nieunikalnych elementów, moglibyśmy odwrócić listę źródłową przed i po usunięciu unikalnych elementów, za wyjątkiem kosztu 4 dodatkowych bajtów:
źródło
CJam, 10
Zakładając, że tablica jest już w zmiennej D (na podstawie tego komentarza ):
Wypróbuj online
Wyjaśnienie:
Uwaga: dodaj,
p
jeśli chcesz ładnego drukowania, w przeciwnym razie tablica wynikowa zostanie po prostu wydrukowana bez domyślnych ograniczników. Jest to do przyjęcia, ponieważ pytanie określa, że fragment kodu musi jedynie „ocenić prawidłowy wynik”.Standardowa wersja wejścia / wyjścia, 13:
Wypróbuj online
Wyjaśnienie:
źródło
q~$e`{((<~}%p
Haskell - 32
Całkiem krótko, nawet przy imporcie.
a \\ b
usuwa pierwsze wystąpienie każdego elementub
za
inub
czyni wszystkie elementy listy unikalnymi.źródło
Pyth, 7 bajtów
Wypróbuj online.
Jak to działa
Pyth automatycznie zapisuje oszacowane dane wejściowe
Q
i drukuje wszystkie nieużywane wartości zwracane.źródło
SQL,
4442 bajtyMam nadzieję, że można założyć, że liczby całkowite są zapisane w tabeli D? Będzie to działać zarówno w SQLServer, PostgreSQL i ewentualnie w innych. Dzięki @manatwork z 2 bajtów.
źródło
select*from d group by 1having count(*)>1
. (Parser MySQL i SQLite równieżselect*from
1having
select*from
. Nie podoba się1having
jednak ... pozostawi to jakoI having
Mathematica,
2926 bajtówZakładając, że dane wejściowe są przechowywane w
d
:W przeciwnym razie jest to 29 bajtów jako funkcja bez nazwy:
Tutaj
d⋃d
(lub#⋃#
) jest golfowa sztuczka polegająca na usuwaniu duplikatów - łącząc zbiór ze sobą, Mathematica interpretuje listę jako zbiór, usuwając duplikaty automatycznie, podczas gdy rzeczywisty związek nic nie robi.Następnie obie metody po prostu filtrują te elementy, które pojawiają się na oryginalnej liście co najmniej dwukrotnie.
źródło
JavaScript (ES6), 37 bajtów
Uruchom to w konsoli JavaScript:
źródło
console.log
,alert
itp) należy uznać za kompletne. Jeśli wyzwanie mówi „napisz program lub funkcję”, funkcja również zwraca wartość. Poza tym bardzo wydajne rozwiązanie!Matlab / Octave, 40
Zakładam, że wartości wejściowe są rzeczywiste (nie złożone). Dane wejściowe są w zmiennej
d
.Wypróbuj online w Octave.
źródło
d = [3, 0, 0, 1, 1, 0, 5, 3]
. Są dwa0
s.d(sum(triu(bsxfun(@eq,d,d')))==2)
. Lub w Octave:d(sum(triu(d==d'))==2)
Python 3.5, 30
Używa rozpakowywania zestawu Python 3.5. The
~-
odejmuje 1, która odbywa się liczyć od 1 do 0, które jest Falsy.To daje listę. Jeśli podanie zestawu jest w porządku, używamy zrozumienia zestawu, oszczędzając 1 znak i nie potrzebując wersji 3.5:
źródło
SyntaxError: invalid syntax
czy w Pythonie 3 działa tylko w wersji 3.5? Kiedy Python zaczął być ezoteryczny.PowerShell,
3129 bajtówZakłada, że
$d
jest już wypełniony (jak podano) - np$d=@(-34,0,1,-34,4,8,4)
.Pipuje tablicę do
Group-Object
cmdleta, który grupuje podobne elementy i wypluwa obiekt, który jest w zasadzie tablicą tablic. Potokujemy to doWhere-Object
(?
operatora), który maCount
więcej niż jeden (tzn. Istnieją duplikaty), i wysyłamy.Name
te elementy. Ma dodatkowy bonus związany z zachowaniem początkowego zamówienia.Edycja - zapisane dwa bajty dzięki Danko Durbićowi
źródło
$_.Count-gt1
z$_.Count-1
którego byłoby prawdziwe dla każdegoCount
większa niż jeden.APL (Dyalog Unicode) ,
139 bajtów SBCSAnonimowa ukryta funkcja prefiksu.
Wypróbuj online!
(
…)⌸
Dla każdego unikalnego elementu (lewy argument) i indeksów, w których występuje (prawy argument), zastosuj następującą ukrytą funkcję:⊣¨
jeden z lewej (unikalny element) dla każdego z prawej (indeksy)1↓
upuść jeden⊂
dołącz (zapobiega wypełnianiu zerami, aby utworzyć niewyrównaną macierz)∊
ε nlist (spłaszczyć)źródło
Julia,
3029 bajtówd.==d'
tworzy macierz symetryczną o wartościi,j
true, jeśli wd[i]==d[j]
przeciwnym razie false.sum
połączenie w jednym wymiarze, a następnie odjęcie 1 da zero, jeśli jest tylko jeden element, i niezerowe, jeśli jest więcej niż jeden.find
otrzyma indeksy niezerowych elementów, które są następnie używane do indeksowaniad
samej tablicy .∪
(unia) działa tak, jakunique
w takim użyciu, usuwając powtórzenia.Stare rozwiązanie:
Prosty - dla każdego wpisu sprawdza, czy w tablicy jest więcej niż jeden. Te, dla których jest więcej niż jeden, są zwracane przez „filtr”, a następnie
∪
(związek) zachowuje się jakunique
użyte w ten sposób, usuwając powtórzenia.Uwaga: pierwotnie miał to jako funkcję, ale pytanie pozwala na przechowywanie tablicy w zmiennej, dla której wybrałem
d
zgodnie z sugestią w pytaniu.źródło
Python 2.7,
3642edit : otaczał wyrażenie listą (...), aby zachować zgodność z formatem wymaganym w pytaniu
źródło
Oktawa, 22 bajty
Na podstawie odpowiedzi Luisa Mendo .
źródło
R,
3124 bajtówDzięki flodel for the 7 bytes.
Zakładając, że wejście jest już w
d
.kod:
edycja: teraz wyświetla poprawnie, jeśli są więcej niż 2 duplikaty wskazane przez aditsu .
źródło
which
since[
also accepts a logical argument.Python 3 -
3330 bytes{_ for _ in d if d.count(_)>1}
Repl output,
d
as input.źródło
Mathematica,
3129źródło
Pyth, 7 bytes
Explanation:
The filter removes all elements that appear exactly once from the set of elements.
źródło
LINQ,
6254 bytesKinda new here, but here goes nothing.
źródło
K (oK), 7 bytes
Solution:
Try it online!
Explanation:
źródło
Shell + GNU coreutils, 12
Test output:
źródło
Mathematica, 23 bytes
With input stored in
d
:As a function, 24 bytes:
for example, with
returns this:
(first element of each sublist is the element, second one is frequency of occurrence). Applying to this list
Pick[#,#2>1]&@@@
transforms it toAnd where the second argument of
Pick
evaluates toTrue
the first argument is returned.źródło
K (not K5), 10 bytes
Assumes input is in
x
. I thought it'd be fun to do a non-K5 answer!źródło
Perl 6, 16 bytes
Assuming the list is stored in
$_
you could use any of the following snippets.( which was specifically allowed )
If you don't care that you get a Bag you could leave off
keys
.None of these have the limitation of only working on signed integers, or even just numbers for that matter.
źródło
Ruby,
3028 bytesIn the Interactive Ruby Shell:
Saved 2 bytes thanks to Kirill L.
źródło
d.select{|x|d.count(x>1)}|[]
JavaScript,
3528 bytesTry It Online!
After posting this, I realised that it was very similar to w0lf's solution.
źródło
Common Lisp, 57 bytes
źródło
Octave, 33 bytes
Here it is on ideone. I've wrapped the snippet in a function so I could call it using all of the sample inputs.
źródło
Java 8, 80 Bytes
Assuming x contains the input List of numbers.
źródło
PHP, 35
37bytesPretty straight forward:
As a note: I didn't add the
;
at the end of the line, as the questions states:So this snippet could be used like this and evaluates to the correct result:
Another note
The code above works for all test cases provided in the challenge. In those all non-unique characters are at most duplicates. If a element can occur more than two times, another
array_unique()
would be necessary, which increases the length to 49 bytes:Edits
array_diff_assoc
witharray_diff_key
. Thanks to Jörg Hülsermann.źródło
array_diff_key
insteadarray_diff_assoc