Écrivez un programme qui trouve les éléments non uniques d'un tableau d'entiers signés. Le tableau résultant peut être dans n'importe quel ordre.
Votre réponse peut être un extrait de code qui suppose que l'entrée est stockée dans une variable ( d
disons) et évalue le résultat correct.
Cas de test
Chaque scénario de test est une seule ligne au format input => output
. Notez que d'autres permutations de la sortie sont également valables.
[] => []
[-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]
L'ordre des éléments n'a pas d'importance.
Il s'agit du code golf, donc la réponse la plus courte (en octets) l'emporte.
code-golf
array-manipulation
counting
garg10may
la source
la source
[-1, 0, 1]
, peut - on l' entrée (remplacer \ n avec sauts de ligne):"-1\n0\n1"
?Réponses:
K5 , 5 octets
En supposant que l'entrée se trouve déjà dans une variable appelée
d
,Prenez les éléments distincts (
?
) de d sauf (d^
) les éléments distincts de d (?d
). Joliment symétrique, non? Cela fonctionne car l'opérateur "except" supprime uniquement la première occurrence de l'argument droit de l'argument gauche.Plus généralement,
En action:
Modifier:
Si nous voulions conserver l'ordre de la première occurrence des éléments non uniques, nous pourrions inverser la liste source avant et après avoir supprimé les éléments uniques via sauf au prix de 4 octets supplémentaires:
la source
CJam, 10
En supposant que le tableau est déjà dans la variable D (sur la base de ce commentaire ):
Essayez-le en ligne
Explication:
Remarque: ajoutez un
p
si vous voulez une jolie impression, sinon le tableau résultant est simplement imprimé sans délimiteur par défaut. Cela est acceptable car la question spécifie que l'extrait n'a besoin que d '"évaluer le résultat correct".Version entrée / sortie standard, 13:
Essayez-le en ligne
Explication:
la source
q~$e`{((<~}%p
Haskell - 32
Assez court, même avec l'importation.
a \\ b
supprime la première occurrence de chaque élément deb
froma
etnub
rend tous les éléments d'une liste uniques.la source
Pyth, 7 octets
Essayez-le en ligne.
Comment ça marche
Pyth stocke automatiquement l'entrée évaluée dans
Q
et imprime toutes les valeurs de retour inutilisées.la source
SQL,
4442 octetsJ'espère qu'il est OK de supposer que les entiers sont stockés dans la table D? Cela fonctionnera à la fois dans SQLServer, PostgreSQL et éventuellement dans d'autres. Merci à @manatwork des 2 octets.
la source
select*from d group by 1having count(*)>1
. (L'analyseur MySQL et SQLite gérera également laselect*from
partie non séparée , mais ils ne comprennent pas1having
.)select*from
. N'aime pas le1having
bien .. laissera cela commeI having
Mathematica,
2926 octetsEn supposant que l'entrée est stockée dans
d
:Sinon, c'est 29 octets en tant que fonction sans nom:
Ici,
d⋃d
(ou#⋃#
) est une astuce de golf pour supprimer les doublons - en prenant l'union définie avec lui-même, Mathematica interprète la liste comme un ensemble, supprimant automatiquement les doublons, tandis que l'union réelle ne fait rien.Ensuite, les deux méthodes filtrent simplement les éléments qui apparaissent dans la liste d'origine au moins deux fois.
la source
JavaScript (ES6), 37 octets
Exécutez ceci dans la console JavaScript:
la source
console.log
,alert
etc.) soit considérée comme complète. Si un défi dit "écrire un programme ou une fonction", alors la fonction renvoie aussi suffit. A part ça, solution très efficace!Matlab / Octave, 40
Je suppose que les valeurs d'entrée sont réelles (pas complexes). L'entrée est dans une variable
d
.Essayez-le en ligne dans Octave.
la source
d = [3, 0, 0, 1, 1, 0, 5, 3]
. Il y a deux0
art.d(sum(triu(bsxfun(@eq,d,d')))==2)
. Ou en Octave:d(sum(triu(d==d'))==2)
Python 3.5, 30
Utilise le déballage de l'ensemble de Python 3.5. le
~-
soustrait 1, ce qui prend un compte de 1 à 0, ce qui est Falsy.Cela donne une liste. Si donner un ensemble est OK, alors nous utilisons une compréhension d'ensemble, sauvant 1 caractère et n'ayant pas besoin de la version 3.5:
la source
SyntaxError: invalid syntax
pour Python 3 est-il valable uniquement pour 3.5? Quand le python a-t-il commencé à devenir ésotérique.PowerShell,
3129 octetsEn supposant que
$d
déjà peuplé (comme indiqué) - par exemple$d=@(-34,0,1,-34,4,8,4)
.Pipes le tableau dans l'
Group-Object
applet de commande, qui regroupe les éléments similaires et crache un objet qui est essentiellement un tableau de tableaux. Nous redirigeons cela vers unWhere-Object
(l'?
opérateur) qui en aCount
plus d'un (c'est-à-dire qu'il y a des doublons), et sortons le.Name
de ces éléments. A un bonus supplémentaire de préservation de la commande initiale.Edit - sauvé deux octets grâce à Danko Durbić
la source
$_.Count-gt1
par ce$_.Count-1
qui serait vrai pour toutCount
plus d'un.APL (Dyalog Unicode) ,
139 octets SBCSFonction de préfixe tacite anonyme.
Essayez-le en ligne!
(
…)⌸
Pour chaque élément unique (argument de gauche) et les indices où il se produit (argument de droite), appliquez la fonction tacite suivante:⊣¨
l'un de gauche (l'élément unique) pour chacun à droite (les indices)1↓
en déposer un⊂
entourer (empêche le remplissage avec des zéros pour créer une matrice non irrégulière)∊
ϵ nlist (aplatir)la source
Julia,
3029 octetsd.==d'
crée une matrice symétrique dont la valeuri,j
est true sid[i]==d[j]
et false sinon.sum
ming dans une dimension, puis soustraire 1 produira zéro s'il n'y a qu'un seul élément et différent de zéro s'il y en a plus d'un.find
obtiendra les index des éléments non nuls, qui sont ensuite utilisés pour indexer le tableaud
lui-même.∪
(union) agit commeunique
s'il était utilisé de cette manière, supprimant les répétitions.Ancienne solution:
Simple - pour chaque entrée, il vérifie s'il y en a plusieurs dans le tableau. Celles pour lesquelles il y en a plusieurs sont renvoyées par "filtre", puis
∪
(union) agit commeunique
lorsqu'il est utilisé de cette manière, supprimant les répétitions.Remarque: à l'origine, il s'agissait d'une fonction, mais la question permet au tableau d'être stocké dans une variable, pour laquelle j'ai choisi
d
comme suggéré dans la question.la source
Python 2.7,
3642modifier : entourer l'expression de liste (..) afin de respecter le format requis dans la question
la source
Octave, 22 octets
Basé sur la réponse de Luis Mendo .
la source
R,
3124 octetsMerci à flodel pour les 7 octets.
En supposant que l'entrée est déjà en
d
.code:
edit: maintenant il sort correctement s'il y a plus de 2 doublons comme indiqué par aditsu .
la source
which
car[
accepte également un argument logique.Python
3-3330 octets{_ for _ in d if d.count(_)>1}
Repl sortie,
d
comme entrée.la source
Mathematica,
3129la source
Pyth, 7 octets
Explication:
Le filtre supprime tous les éléments qui apparaissent exactement une fois dans l'ensemble d'éléments.
la source
LINQ,
6254 octetsUn peu nouveau ici, mais ici ne va rien.
la source
K (oK) , 7 octets
Solution:
Essayez-le en ligne!
Explication:
la source
Coquille + coreutils GNU, 12
Sortie de test:
la source
Mathematica, 23 octets
Avec une entrée stockée dans
d
:En fonction, 24 octets:
par exemple, avec
renvoie ceci:
(le premier élément de chaque sous-liste est l'élément, le second est la fréquence d'occurrence). L'application à cette liste la
Pick[#,#2>1]&@@@
transforme enEt où le deuxième argument de
Pick
s'évalue auTrue
premier argument est retourné.la source
K (pas K5), 10 octets
Suppose que l'entrée est en
x
. Je pensais que ce serait amusant de faire une réponse non K5!la source
Perl 6, 16 octets
En supposant que la liste est stockée dans,
$_
vous pouvez utiliser l'un des extraits suivants.(ce qui était spécifiquement autorisé)
Si vous ne vous souciez pas que vous obtenez un sac, vous pouvez laisser de côté
keys
.Aucun de ceux-ci n'a la limitation de travailler uniquement sur des entiers signés, ou même seulement des nombres d'ailleurs.
la source
Rubis,
3028 octetsDans l'Interactive Ruby Shell :
Enregistré 2 octets grâce à Kirill L.
la source
d.select{|x|d.count(x>1)}|[]
JavaScript,
3528 octetsEssayez-le en ligne!
Après avoir posté cela, j'ai réalisé que c'était très similaire à la solution de w0lf .
la source
Lisp commun, 57 octets
la source
Octave, 33 octets
Ici, c'est sur ideone . J'ai enveloppé l'extrait de code dans une fonction afin que je puisse l'appeler en utilisant toutes les entrées d'échantillon.
la source
Java 8, 80 octets
En supposant que x contient la liste de nombres entrée.
la source
PHP, 35
37octetsAssez simple:
Remarque: je n'ai pas ajouté le
;
à la fin de la ligne, comme l'indique la question:Cet extrait peut donc être utilisé comme ceci et évalue le résultat correct:
Une autre note
Le code ci-dessus fonctionne pour tous les cas de test fournis dans le défi. Dans ceux-ci, tous les caractères non uniques sont tout au plus des doublons. Si un élément peut se produire plus de deux fois, un autre
array_unique()
serait nécessaire, ce qui augmentera la longueur à 49 octets :Modifications
array_diff_assoc
pararray_diff_key
. Merci à Jörg Hülsermann .la source
array_diff_key
à la placearray_diff_assoc