Schreiben Sie ein Programm, das die nicht eindeutigen Elemente eines Arrays von Ganzzahlen mit Vorzeichen findet. Das resultierende Array kann in beliebiger Reihenfolge vorliegen.
Ihre Antwort kann ein Ausschnitt sein, der davon ausgeht, dass die Eingabe in einer Variablen gespeichert ist (z d
. B.) und zum richtigen Ergebnis ausgewertet wird.
Testfälle
Jeder Testfall ist eine einzelne Zeile im Format input => output
. Beachten Sie, dass auch andere Permutationen der Ausgabe gültig sind.
[] => []
[-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]
Die Reihenfolge der Elemente spielt keine Rolle.
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
code-golf
array-manipulation
counting
garg10may
quelle
quelle
[-1, 0, 1]
, können wir Eingang (ersetzen \ n mit Zeilenumbrüchen):"-1\n0\n1"
?Antworten:
K5 , 5 Bytes
Angenommen, die Eingabe befindet sich bereits in einer Variablen mit dem Namen
d
,Nehmen Sie die verschiedenen Elemente (
?
) von d mit Ausnahme (d^
) der verschiedenen Elemente von d (?d
). Schön symmetrisch, nein? Das funktioniert , weil die „außer“ Bediener entnimmt nur das erste Vorkommen des rechten Arguments vom linken Argumente.Allgemeiner,
In Aktion:
Bearbeiten:
Wenn wir die Reihenfolge beibehalten möchten, in der nicht eindeutige Elemente zum ersten Mal vorkommen, können wir die Quellliste umkehren, bevor und nachdem wir die eindeutigen Elemente über entfernen, mit Ausnahme der Kosten für 4 zusätzliche Bytes:
quelle
CJam, 10
Angenommen, das Array befindet sich bereits in Variable D (basierend auf diesem Kommentar ):
Probieren Sie es online aus
Erläuterung:
Hinweis: Fügen Sie ein an,
p
wenn Sie einen hübschen Ausdruck wünschen. Andernfalls wird das resultierende Array standardmäßig nur ohne Begrenzer ausgedruckt. Dies ist akzeptabel, da in der Frage angegeben ist, dass das Snippet nur "zum richtigen Ergebnis auswerten" muss.Standard Ein- / Ausgabeversion, 13:
Probieren Sie es online aus
Erläuterung:
quelle
q~$e`{((<~}%p
Haskell - 32
Ziemlich kurz, auch beim Import.
a \\ b
entfernt das erste Auftreten eines jeden Elementsb
ausa
, undnub
macht alle Elemente einer Liste einzigartig.quelle
Pyth, 7 Bytes
Probieren Sie es online aus.
Wie es funktioniert
Pyth speichert die ausgewerteten Eingaben automatisch in
Q
und druckt alle nicht verwendeten Rückgabewerte.quelle
SQL,
4442 BytesIch hoffe, es ist in Ordnung anzunehmen, dass die ganzen Zahlen in Tabelle D gespeichert sind. Dies funktioniert sowohl in SQLServer, PostgreSQL und möglicherweise anderen. Danke an @manatwork aus den 2 Bytes.
quelle
select*from d group by 1having count(*)>1
. (Der Parser von MySQL und SQLite wird auch den nicht getrenntenselect*from
Teil verarbeiten, aber sie verstehen nicht1having
.)select*from
.1having
I having
Mathematica,
2926 BytesAngenommen, die Eingabe wird gespeichert in
d
:Ansonsten sind es 29 Bytes als unbenannte Funktion:
Hier ist
d⋃d
(oder#⋃#
) ein Golf-Trick, um Duplikate zu entfernen - indem Mathematica die Mengenvereinigung mit sich selbst nimmt, interpretiert sie die Liste als eine Menge und entfernt Duplikate automatisch, während die tatsächliche Vereinigung nichts tut.Anschließend filtern beide Methoden einfach die Elemente, die in der ursprünglichen Liste mindestens zweimal vorkommen.
quelle
JavaScript (ES6), 37 Byte
Führen Sie dies in der JavaScript-Konsole aus:
quelle
console.log
,alert
, usw.) als abgeschlossen betrachtet werden. Wenn eine Abfrage "Programm oder Funktion schreiben" lautet, reicht auch die Rückgabe der Funktion aus. Abgesehen davon sehr effiziente Lösung!Matlab / Octave, 40
Ich gehe davon aus, dass Eingabewerte real sind (nicht komplex). Die Eingabe erfolgt in einer Variablen
d
.Probieren Sie es online in Octave.
quelle
d = [3, 0, 0, 1, 1, 0, 5, 3]
. Es gibt zwei0
s.d(sum(triu(bsxfun(@eq,d,d')))==2)
. Oder in der Oktave:d(sum(triu(d==d'))==2)
Python 3.5, 30
Verwendet das Auspacken von Python 3.5-Sets. Der
~-
subtrahiert 1, was von 1 bis 0 zählt, was Falsy ist.Dies gibt eine Liste. Wenn es in Ordnung ist, ein Set anzugeben, verwenden wir ein Set-Verständnis, das 1 Zeichen spart und keine Version 3.5 benötigt:
quelle
SyntaxError: invalid syntax
für Python 3 ist es nur für 3.5 gültig? Wann hat Python angefangen, esoterisch zu werden.PowerShell,
3129 BytesNimmt an, dass
$d
das bereits besiedelt ist (wie angegeben) - zB$d=@(-34,0,1,-34,4,8,4)
.Group-Object
Leitet das Array in das Cmdlet, in dem ähnliche Elemente zusammengefasst und ein Objekt ausgespuckt werden, das im Wesentlichen ein Array von Arrays ist. Wir leiten das an einenWhere-Object
(den?
Operator) weiter, derCount
mehr als eins hat (dh es gibt Duplikate), und geben die.Name
dieser Elemente aus. Hat auch einen Nebenbonus, die ursprüngliche Bestellung beizubehalten.Bearbeiten - zwei Bytes dank Danko Durbić gespeichert
quelle
$_.Count-gt1
mit$_.Count-1
denen für jeden wahr wäreCount
größer als eins.APL (Dyalog Unicode) ,
139 Byte SBCSAnonyme implizite Präfixfunktion.
Probieren Sie es online!
(
… Wenden Sie)⌸
für jedes eindeutige Element (linkes Argument) und die Indizes, in denen es vorkommt (rechtes Argument) die folgende implizite Funktion an:⊣¨
jeweils eines der linken (das eindeutige Element) auf der rechten Seite (die Indizes)1↓
lass eins fallen⊂
Einschließen (verhindert das Auffüllen mit Nullen, um eine nicht zackige Matrix zu erstellen)∊
ϵ nlist (Abflachen)quelle
Julia,
3029 Bytesd.==d'
Erstellt eine symmetrische Matrix mit dem Werti,j
true, wennd[i]==d[j]
und false, wenn nicht.sum
Wenn Sie in einer Dimension mischen und dann 1 subtrahieren, wird Null erzeugt, wenn nur eines der Elemente vorhanden ist, und ungleich Null, wenn mehr als eins vorhanden ist.find
Ruft die Indizes der Nicht-Null-Elemente ab, die dann zum Indizieren des Arraysd
selbst verwendet werden.∪
(union) verhält sich so,unique
als würde man die Wiederholungen auf diese Weise entfernen.Alte Lösung:
Einfach - für jeden Eintrag wird geprüft, ob mehr als ein Eintrag im Array vorhanden ist. Diejenigen, für die es mehr als einen gibt, werden von "filter" zurückgegeben, und dann
∪
verhält sich (union) so,unique
als ob die Wiederholungen auf diese Weise entfernt würden.Hinweis: Hatte es ursprünglich als Funktion, aber mit question kann ein Array in einer Variablen gespeichert werden, für die ich
d
die in der Frage vorgeschlagene Option ausgewählt habe .quelle
Python 2.7,
3642edit : umgab den Ausdruck mit liste (..), um das in der Frage geforderte Format einzuhalten
quelle
Oktave, 22 Bytes
Basierend auf Luis Mendos Antwort .
quelle
R,
3124 BytesDanke an flodel für die 7 Bytes.
Angenommen, die Eingabe ist bereits in
d
.Code:
edit: es wird nun korrekt ausgegeben , wenn mehr als 2 Duplikate vorhanden sind, wie von aditsu angegeben .
quelle
which
da[
auch ein logisches Argument entfernen .Python 3 -
3330 Bytes{_ for _ in d if d.count(_)>1}
Repl-Ausgabe
d
als Eingabe.quelle
Mathematica,
31,29quelle
Pyth, 7 Bytes
Erläuterung:
Der Filter entfernt alle Elemente, die genau einmal vorkommen, aus der Elementmenge.
quelle
LINQ,
6254 BytesEin bisschen neu hier, aber hier geht nichts.
quelle
K (ok) , 7 Bytes
Lösung:
Probieren Sie es online!
Erläuterung:
quelle
Shell + GNU Coreutils, 12
Testausgang:
quelle
Mathematica, 23 Bytes
Mit Eingaben gespeichert in
d
:In Abhängigkeit von 24 Bytes:
zum Beispiel mit
gibt dies zurück:
(Das erste Element jeder Unterliste ist das Element, das zweite ist die Häufigkeit des Auftretens). Das Anwenden auf diese Liste
Pick[#,#2>1]&@@@
wandelt sie inUnd wo das zweite Argument von
Pick
evaluiert zumTrue
ersten Argument zurückgegeben wird.quelle
K (nicht K5), 10 Bytes
Angenommen, die Eingabe ist in
x
. Ich dachte, es würde Spaß machen, eine Nicht-K5-Antwort zu machen!quelle
Perl 6, 16 Bytes
Angenommen, die Liste ist in gespeichert, können
$_
Sie einen der folgenden Ausschnitte verwenden.(was ausdrücklich erlaubt war)
Wenn es Sie nicht interessiert, dass Sie eine Tasche bekommen, können Sie aufhören
keys
.Keines davon hat die Einschränkung, nur mit vorzeichenbehafteten ganzen Zahlen oder auch nur mit Zahlen zu arbeiten.
quelle
Ruby,
3028 BytesIn der interaktiven Ruby Shell :
2 Bytes gespart dank Kirill L.
quelle
d.select{|x|d.count(x>1)}|[]
JavaScript,
3528 BytesProbieren Sie es online!
Nachdem ich dies gepostet hatte , stellte ich fest, dass es der Lösung von w0lf sehr ähnlich war .
quelle
Common Lisp, 57 Bytes
quelle
Oktave, 33 Bytes
Hier ist es auf ideone . Ich habe das Snippet in eine Funktion eingebunden, damit ich es mit allen Sample-Eingaben aufrufen kann.
quelle
Java 8, 80 Bytes
Angenommen, x enthält die eingegebene Liste der Zahlen.
quelle
PHP, 35
37BytesZiemlich einfach:
Als Anmerkung: Ich habe das
;
am Ende der Zeile nicht hinzugefügt , wie die Fragen besagen:Dieses Snippet könnte also so verwendet werden und ergibt das richtige Ergebnis:
Noch ein Hinweis
Der obige Code funktioniert für alle in der Challenge bereitgestellten Testfälle. In diesen sind alle nicht eindeutigen Zeichen höchstens Duplikate. Wenn ein Element mehr als zweimal vorkommen kann, ist ein weiteres Element
array_unique()
erforderlich, wodurch die Länge auf 49 Byte erhöht wird :Bearbeitungen
array_diff_assoc
mitarray_diff_key
. Vielen Dank an Jörg Hülsermann .quelle
array_diff_key
stattdessenarray_diff_assoc