Напишите программу, которая находит неуникальные элементы массива целых чисел со знаком. Полученный массив может быть в любом порядке.
Ваш ответ может быть фрагментом, который предполагает, что ввод будет сохранен в переменной ( d
скажем) и оценивает правильный результат.
Тестовые случаи
Каждый тестовый пример представляет собой одну строку в формате input => output
. Обратите внимание, что другие перестановки вывода также действительны.
[] => []
[-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]
Порядок элементов не имеет значения.
Это код гольф, поэтому самый короткий ответ (в байтах) выигрывает.
code-golf
array-manipulation
counting
garg10may
источник
источник
[-1, 0, 1]
, мы можем ввода (заменить \ п с новой строкой):"-1\n0\n1"
?Ответы:
К5 , 5 байт
Предполагая, что вход уже находится в переменной с именем
d
,Возьмите различные элементы (
?
) из d, кроме (d^
) различных элементов из d (?d
). Красиво симметрично, нет? Это работает, потому что оператор «кроме» удаляет только первое вхождение правого аргумента из левого аргумента.В более общем смысле,
В бою:
Редактировать:
Если бы мы хотели сохранить порядок первого появления неуникальных элементов, мы могли бы изменить список источников до и после удаления уникальных элементов с помощью, за исключением 4 дополнительных байтов:
источник
CJam, 10
Предполагая, что массив уже находится в переменной D (на основе этого комментария ):
Попробуйте онлайн
Объяснение:
Примечание: добавьте
p
если вы хотите красивую печать, иначе полученный массив просто распечатывается без разделителей по умолчанию. Это приемлемо, поскольку в вопросе указывается, что фрагменту нужно только «оценить правильный результат».Стандартная версия ввода / вывода, 13:
Попробуйте онлайн
Объяснение:
источник
q~$e`{((<~}%p
Haskell - 32
Довольно короткий, даже с учетом импорта.
a \\ b
удаляет первое вхождение каждого элементаb
изa
иnub
делает все элементы списка уникальными.источник
Pyth, 7 байт
Попробуйте онлайн.
Как это работает
Pyth автоматически сохраняет оцененные входные данные
Q
и печатает все неиспользуемые возвращаемые значения.источник
SQL,
4442 байтаЯ надеюсь, что можно предположить, что целые числа хранятся в таблице D? Это будет работать как в SQLServer, PostgreSQL, так и, возможно, в других. Благодаря @manatwork из 2 байтов.
источник
select*from d group by 1having count(*)>1
. (Парсер MySQL и SQLite также будет обрабатывать неразделеннуюselect*from
часть, но они не понимают1having
.)select*from
. Не любит,1having
хотя .. оставит это какI having
Математика,
2926 байтПредполагая, что вход хранится в
d
:В противном случае, это 29 байтов как безымянная функция:
Здесь
d⋃d
(или#⋃#
) это игра в гольф для удаления дубликатов - принимая объединение наборов с собой, Mathematica интерпретирует список как набор, автоматически удаляя дубликаты, в то время как фактическое объединение ничего не делает.После этого оба метода просто фильтруют те элементы, которые появляются в исходном списке как минимум дважды.
источник
JavaScript (ES6), 37 байт
Запустите это в консоли JavaScript:
источник
console.log
,alert
и т. Д.) Считалась завершенной. Если в запросе написано «написать программу или функцию», то также достаточно возврата из функции. Помимо этого, очень эффективное решение!Matlab / Octave, 40
Я предполагаю, что входные значения реальны (не сложны). Ввод в переменной
d
.Попробуйте это онлайн в Октаве.
источник
d = [3, 0, 0, 1, 1, 0, 5, 3]
. Есть два0
с.d(sum(triu(bsxfun(@eq,d,d')))==2)
. Или вd(sum(triu(d==d'))==2)
Python 3.5, 30
Использует распакованный набор Python 3.5.
~-
вычитает 1, который принимает отсчет от 1 до 0 , который является Falsy.Это дает список. Если предоставление набора в порядке, тогда мы используем понимание набора, сохраняя 1 символ и не нуждаясь в версии 3.5:
источник
SyntaxError: invalid syntax
для Python 3 это действительно только для 3.5? Когда питон начал становиться эзотерическим.PowerShell,
3129 байтПредполагается , что
$d
уже заселена (как указано) - например,$d=@(-34,0,1,-34,4,8,4)
.Передает массив в
Group-Object
командлет, который группирует элементы Like и выделяет объект, который по сути является массивом массивов. Мы передаем это вWhere-Object
(?
оператор), который имеетCount
больше одного (то есть, есть дубликаты), и выводим.Name
эти элементы. Имеет побочный бонус сохранения первоначального заказа тоже.Edit - сохранил два байта благодаря Данко Дурбичу
источник
$_.Count-gt1
с$_.Count-1
которой было бы верно для любогоCount
больше , чем один.APL (Dyalog Unicode) ,
139 байтов SBCSФункция анонимного молчаливого префикса.
Попробуйте онлайн!
(
…)⌸
Для каждого уникального элемента (левый аргумент) и индексов, где он встречается (правый аргумент), примените следующую скрытую функцию:⊣¨
один слева (уникальный элемент) для каждого справа (индексы)1↓
брось один⊂
enclace (предотвращает заполнение нулями для создания неповрежденной матрицы)∊
ε NLIST (Flatten)источник
Юлия,
3029 байтd.==d'
создает симметричную матрицу со значениемi,j
true, еслиd[i]==d[j]
и false в противном случае.sum
Если в одном измерении затем вычесть 1, то получится ноль, если есть только один элемент, и ненулевое значение, если их больше одного.find
получит индексы ненулевых элементов, которые затем используются для индексации самого массиваd
.∪
(объединение) действует какunique
при использовании таким образом, удаляя повторы.Старое решение:
Просто - для каждой записи проверяется, есть ли в массиве более одной записи. Те, для которых их более одного, возвращаются фильтром, а затем
∪
(объединение) действует какunique
при использовании таким образом, удаляя повторы.Примечание: изначально он был как функция, но вопрос позволяет хранить массив в переменной, для которой я выбрал,
d
как предложено в вопросе.источник
Python 2.7,
3642edit : окружил выражение списком (..) для соответствия формату, необходимому в вопросе
источник
Octave, 22 bytes
Based on Luis Mendo's answer.
источник
R,
3124 bytesThanks to flodel for the 7 bytes.
Assuming the input is already in
d
.code:
edit: now it outputs correctly if there are more than 2 duplicates as pointed by aditsu.
источник
which
since[
also accepts a logical argument.Python 3 -
3330 bytes{_ for _ in d if d.count(_)>1}
Repl output,
d
as input.источник
Mathematica,
3129источник
Pyth, 7 bytes
Explanation:
The filter removes all elements that appear exactly once from the set of elements.
источник
LINQ,
6254 bytesKinda new here, but here goes nothing.
источник
K (oK), 7 bytes
Solution:
Try it online!
Explanation:
источник
Shell + GNU coreutils, 12
Test output:
источник
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.источник
K (not K5), 10 bytes
Assumes input is in
x
. I thought it'd be fun to do a non-K5 answer!источник
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.
источник
Ruby,
3028 bytesIn the Interactive Ruby Shell:
Saved 2 bytes thanks to Kirill L.
источник
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.
источник
Common Lisp, 57 bytes
источник
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.
источник
Java 8, 80 Bytes
Assuming x contains the input List of numbers.
источник
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.источник
array_diff_key
insteadarray_diff_assoc