Escreva um programa que encontre os elementos não exclusivos de uma matriz de números inteiros assinados. A matriz resultante pode estar em qualquer ordem.
Sua resposta pode ser um trecho que assume que a entrada deve ser armazenada em uma variável ( d
digamos) e avalia o resultado correto.
Casos de teste
Cada caso de teste é uma única linha no formato input => output
. Observe que outras permutações da saída também são válidas.
[] => []
[-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]
A ordem dos elementos não importa.
Isso é código de golfe, então a resposta mais curta (em bytes) vence.
code-golf
array-manipulation
counting
garg10may
fonte
fonte
[-1, 0, 1]
, podemos inserir (substituir \ n por novas linhas)"-1\n0\n1"
:?Respostas:
K5 , 5 bytes
Assumindo que a entrada é já em uma variável chamada
d
,Tome os elementos distintos (
?
) de d, exceto (d^
) os elementos distintos de d (?d
). Bem simétrico, não? Isso funciona porque o operador "exceto" remove apenas a primeira ocorrência do argumento correto do argumento esquerdo.Geralmente mais,
Em ação:
Editar:
Se quiséssemos preservar a ordem da primeira ocorrência de elementos não exclusivos, poderíamos reverter a lista de fontes antes e depois de remover os elementos exclusivos via, exceto pelo custo de 4 bytes extras:
fonte
CJam, 10
Supondo que a matriz já esteja na variável D (com base neste comentário ):
Experimente online
Explicação:
Nota: anexe a
p
se desejar uma impressão bonita, caso contrário, a matriz resultante será impressa sem delimitadores por padrão. Isso é aceitável, pois a pergunta especifica que o snippet precisa apenas "avaliar o resultado correto".Versão padrão de entrada / saída, 13:
Experimente online
Explicação:
fonte
q~$e`{((<~}%p
Haskell - 32
Muito curto, mesmo com a importação.
a \\ b
remove a primeira ocorrência de cada elemento dab
a partir dea
, enub
faz com que todos os elementos de uma lista exclusiva.fonte
Pitão, 7 bytes
Experimente online.
Como funciona
Pyth armazena automaticamente a entrada avaliada
Q
e imprime todos os valores de retorno não utilizados.fonte
SQL,
4442 bytesEspero que seja correto assumir que os números inteiros estão armazenados na tabela D? Isso funcionará no SQLServer, PostgreSQL e possivelmente em outros. Graças a @manatwork a partir dos 2 bytes.
fonte
select*from d group by 1having count(*)>1
. (Analisador de MySQL e SQLite também irá lidar com o inseparávelselect*from
parte, mas eles não entendem1having
.)select*from
. Não gosta do1having
embora .. vai deixar isso como #I having
Mathematica,
2926 bytesSupondo que a entrada seja armazenada em
d
:Caso contrário, são 29 bytes como uma função sem nome:
Aqui,
d⋃d
(ou#⋃#
) é um truque de golfe para remover duplicatas - levando a união do conjunto consigo, o Mathematica interpreta a lista como um conjunto, removendo as duplicatas automaticamente, enquanto a união real não faz nada.Depois, ambos os métodos simplesmente filtram os elementos que aparecem na lista original pelo menos duas vezes.
fonte
JavaScript (ES6), 37 bytes
Execute isso no console do JavaScript:
fonte
console.log
,alert
, etc) seja considerada completa. Se um desafio disser "escrever um programa ou função", os retornos da função também serão suficientes. Além disso, solução muito eficiente!Matlab / Oitava, 40
Estou assumindo que os valores de entrada são reais (não complexos). A entrada está em uma variável
d
.Experimente online no Octave.
fonte
d = [3, 0, 0, 1, 1, 0, 5, 3]
. Existem dois0
s.d(sum(triu(bsxfun(@eq,d,d')))==2)
. Ou na oitava:d(sum(triu(d==d'))==2)
Python 3.5, 30
Usa o conjunto de descompactação do Python 3.5. O
~-
subtrai 1, que conta de 1 a 0, que é Falsy.Isso dá uma lista. Se fornecer um conjunto estiver OK, usamos uma compreensão do conjunto, economizando 1 caractere e não necessitando da versão 3.5:
fonte
SyntaxError: invalid syntax
para Python 3 é válido apenas para 3.5? Quando python começou a se tornar esotérico.PowerShell,
3129 bytesAssume que
$d
já está preenchido (conforme fornecido) - por exemplo$d=@(-34,0,1,-34,4,8,4)
,.Coloca a matriz no
Group-Object
cmdlet, que agrupa itens semelhantes e cospe um objeto que é essencialmente uma matriz de matrizes. Nós canalizamos isso para umWhere-Object
(?
operador) que temCount
mais de um (ou seja, existem duplicatas) e produzimos.Name
esses itens. Tem um bônus adicional de preservar a ordem inicial também.Editar - salvou dois bytes graças a Danko Durbić
fonte
$_.Count-gt1
com o$_.Count-1
que seria verdade para qualquerCount
maior que um.APL (Dyalog Unicode) ,
139 bytes SBCSFunção de prefixo tácito anônimo.
Experimente online!
(
…)⌸
Para cada elemento exclusivo (argumento da esquerda) e os índices onde ocorre (argumento da direita), aplique a seguinte função tácita:⊣¨
um da esquerda (o elemento exclusivo) de cada um à direita (os índices)1↓
soltar um⊂
delimite (evita o preenchimento com zeros para criar uma matriz não irregular)∊
ε nlist (achatar)fonte
Julia,
3029 bytesd.==d'
cria uma matriz simétrica com o valori,j
sendo verdadeiro sed[i]==d[j]
e falso caso contrário.sum
a combinação de uma dimensão e a subtração de 1 produzirão zero se houver apenas um elemento e diferente de zero se houver mais de um.find
obterá os índices dos elementos diferentes de zero, que são usados para indexar ad
própria matriz .∪
(união) age comounique
quando usado dessa maneira, removendo as repetições.Solução antiga:
Simples - para cada entrada, verifica se há mais de uma na matriz. Aqueles para os quais existem mais de um são retornados por "filtro" e, em seguida,
∪
(união) agem comounique
quando usados dessa maneira, removendo as repetições.Nota: originalmente tinha como função, mas a pergunta permite que o array seja armazenado em uma variável, para a qual eu escolhi
d
como sugerido na pergunta.fonte
Python 2.7,
3642editar : envolveu a expressão com lista (..) para atender ao formato exigido na pergunta
fonte
Oitava, 22 bytes
Baseado na resposta de Luis Mendo .
fonte
R,
31bytes 24Graças a flodel para os 7 bytes.
Assumindo que a entrada é já em
d
.código:
edit: agora é exibido corretamente se houver mais de 2 duplicatas, conforme indicado pelo aditsu .
fonte
which
pois[
também aceita um argumento lógico.Python
3-3330 bytes{_ for _ in d if d.count(_)>1}
Substitua a saída
d
como entrada.fonte
Mathematica,
3129fonte
Pitão, 7 bytes
Explicação:
O filtro remove todos os elementos que aparecem exatamente uma vez do conjunto de elementos.
fonte
LINQ,
6254 bytesUm pouco novo aqui, mas aqui não vale nada.
fonte
K (oK) , 7 bytes
Solução:
Experimente online!
Explicação:
fonte
Shell + GNU coreutils, 12
Saída de teste:
fonte
Mathematica, 23 bytes
Com a entrada armazenada em
d
:Em função, 24 bytes:
por exemplo, com
retorna isso:
(o primeiro elemento de cada sub-lista é o elemento, o segundo é a frequência de ocorrência). A aplicação a esta lista a
Pick[#,#2>1]&@@@
transforma emE onde o segundo argumento de
Pick
avalia paraTrue
o primeiro argumento é retornado.fonte
K (não K5), 10 bytes
Assume que a entrada está inserida
x
. Eu pensei que seria divertido fazer uma resposta que não fosse do K5!fonte
Perl 6, 16 bytes
Supondo que a lista esteja armazenada,
$_
você pode usar qualquer um dos seguintes trechos.(que foi especificamente permitido)
Se você não se importa com a compra de uma bolsa, pode deixar de usá-la
keys
.Nenhum deles tem a limitação de trabalhar apenas números inteiros assinados, ou mesmo apenas números para esse assunto.
fonte
Ruby,
3028 bytesNo Ruby Shell interativo :
Economizou 2 bytes graças a Kirill L.
fonte
d.select{|x|d.count(x>1)}|[]
JavaScript,
3528 bytesExperimente Online!
Depois de postar isso, percebi que era muito semelhante à solução do w0lf .
fonte
Lisp comum, 57 bytes
fonte
Oitava, 33 bytes
Aqui está no ideone . Eu agrupei o trecho em uma função para poder chamá-lo usando todas as entradas de amostra.
fonte
Java 8, 80 bytes
Supondo que x contém a lista de números de entrada.
fonte
PHP, 35
37bytesBem direto:
Como observação: não adicionei o
;
no final da linha, como as perguntas afirmam:Portanto, esse snippet pode ser usado assim e avaliado para o resultado correto:
Outra nota
O código acima funciona para todos os casos de teste fornecidos no desafio. Nesses, todos os caracteres não exclusivos são no máximo duplicados. Se um elemento puder ocorrer mais de duas vezes, outro
array_unique()
seria necessário, o que aumenta o comprimento para 49 bytes :Edições
array_diff_assoc
porarray_diff_key
. Agradecimentos a Jörg Hülsermann .fonte
array_diff_key
em vezarray_diff_assoc