Escriba un programa que encuentre los elementos no únicos de una matriz de enteros con signo. La matriz resultante puede estar en cualquier orden.
Su respuesta puede ser un fragmento que asume que la entrada se almacena en una variable ( d
digamos) y se evalúa como el resultado correcto.
Casos de prueba
Cada caso de prueba es una sola línea en el formato input => output
. Tenga en cuenta que otras permutaciones de la salida también son 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]
El orden de los elementos no importa.
Este es el código de golf, por lo que gana la respuesta más corta (en bytes).
code-golf
array-manipulation
counting
garg10may
fuente
fuente
[-1, 0, 1]
, ¿podemos ingresar (reemplazar \ n con líneas nuevas)"-1\n0\n1"
:?Respuestas:
K5 , 5 bytes
Asumiendo que la entrada ya está en una variable llamada
d
,Tome los elementos distintos (
?
) de d excepto (d^
) los elementos distintos de d (?d
). Muy simétrico, ¿no? Esto funciona porque el operador "excepto" elimina solo la primera aparición del argumento derecho del argumento izquierdo.Más generalmente,
En acción:
Editar:
Si quisiéramos preservar el orden de la primera aparición de elementos no únicos, podríamos revertir la lista fuente antes y después de eliminar los elementos únicos a través de, excepto al costo de 4 bytes adicionales:
fuente
CJam, 10
Suponiendo que la matriz ya está en la variable D (según este comentario ):
Pruébalo en línea
Explicación:
Nota: agregue un
p
si desea una impresión bonita, de lo contrario, la matriz resultante simplemente se imprime sin delimitadores de forma predeterminada. Eso es aceptable ya que la pregunta especifica que el fragmento solo necesita "evaluar el resultado correcto".Versión estándar de entrada / salida, 13:
Pruébalo en línea
Explicación:
fuente
q~$e`{((<~}%p
Haskell - 32
Bastante corto, incluso con la importación.
a \\ b
elimina la primera aparición de cada elemento deb
froma
ynub
hace que todos los elementos de una lista sean únicos.fuente
Pyth, 7 bytes
Pruébalo en línea.
Cómo funciona
Pyth almacena automáticamente la entrada evaluada
Q
e imprime todos los valores de retorno no utilizados.fuente
SQL,
4442 bytesEspero que esté bien suponer que los enteros están almacenados en la tabla D? Esto funcionará tanto en SQLServer, PostgreSQL y posiblemente en otros. Gracias a @manatwork de los 2 bytes.
fuente
select*from d group by 1having count(*)>1
. (El analizador de MySQL y SQLite también se encargará de laselect*from
parte no1having
select*from
. Sin1having
embargo, no me gusta ... dejará eso comoI having
Mathematica,
2926 bytesSuponiendo que la entrada se almacena en
d
:De lo contrario, son 29 bytes como una función sin nombre:
Aquí,
d⋃d
(o#⋃#
) es un truco de golf para eliminar duplicados: al tomar la unión del conjunto consigo mismo, Mathematica interpreta la lista como un conjunto, eliminando duplicados automáticamente, mientras que la unión real no hace nada.Luego, ambos métodos simplemente filtran los elementos que aparecen en la lista original al menos dos veces.
fuente
JavaScript (ES6), 37 bytes
Ejecute esto en la consola de JavaScript:
fuente
console.log
,alert
, etc.) que se considera completa. Si un desafío dice "escribir un programa o función", la función devuelve también es suficiente. ¡Aparte de eso, una solución muy eficiente!Matlab / Octave, 40
Supongo que los valores de entrada son reales (no complejos). La entrada está en una variable
d
.Pruébelo en línea en Octave.
fuente
d = [3, 0, 0, 1, 1, 0, 5, 3]
. Hay dos0
s.d(sum(triu(bsxfun(@eq,d,d')))==2)
. O en Octave:d(sum(triu(d==d'))==2)
Python 3.5, 30
Utiliza el desempaquetado de Python 3.5. Los
~-
resta 1, que toma un recuento de 1 a 0, que es Falsy.Esto da una lista. Si dar un conjunto está bien, entonces usamos una comprensión del conjunto, guardando 1 carácter y no necesita la versión 3.5:
fuente
SyntaxError: invalid syntax
para Python 3 ¿es válido solo para 3.5? Cuando Python comenzó a volverse esotérico.PowerShell,
3129 bytesAsume que
$d
ya está poblada (como dado) - por ejemplo,$d=@(-34,0,1,-34,4,8,4)
.Conecta la matriz al
Group-Object
cmdlet, que agrupa elementos similares y escupe un objeto que es esencialmente una matriz de matrices. Lo canalizamos a unWhere-Object
(el?
operador) que tieneCount
más de uno (es decir, hay duplicados), y enviamos el resultado.Name
de esos elementos. Tiene una ventaja adicional de preservar el pedido inicial también.Editar: ahorró dos bytes gracias a Danko Durbić
fuente
$_.Count-gt1
con lo$_.Count-1
que sería cierto para cualquierCount
mayor de uno.APL (Dyalog Unicode) ,
13SBCSde9 bytesFunción de prefijo tácito anónimo.
Pruébalo en línea!
(
...)⌸
para cada elemento único (argumento izquierdo) y los índices donde ocurre (argumento derecho), aplique la siguiente función tácita:⊣¨
uno de la izquierda (el elemento único) para cada uno a la derecha (los índices)1↓
soltar uno⊂
encerrar (evita el relleno con ceros para crear una matriz no desigual)∊
ϵ nlist (aplanar)fuente
Julia,
3029 bytesd.==d'
crea una matriz simétrica con el valor dei,j
ser verdadero sid[i]==d[j]
y falso de lo contrario.sum
ming en una dimensión y luego restando 1 producirá cero si solo hay uno del elemento y distinto de cero si hay más de uno.find
obtendrá los índices de los elementos distintos de cero, que luego se utilizan para indexar la matriz end
sí.∪
(union) actúa comounique
cuando se usa de esta manera, eliminando las repeticiones.Vieja solución:
Simple: para cada entrada, comprueba si hay más de una en la matriz. Aquellos para los que hay más de uno son devueltos por "filtro", y luego
∪
(unión) actúa comounique
cuando se usa de esta manera, eliminando las repeticiones.Nota: originalmente lo tenía como función, pero la pregunta permite que la matriz se almacene en una variable, para lo cual he elegido
d
como se sugiere en la pregunta.fuente
Python 2.7,
3642editar : rodeó la expresión con la lista (..) para cumplir con el formato requerido en la pregunta
fuente
Octava, 22 bytes
Basado en la respuesta de Luis Mendo .
fuente
R,
3124 bytesGracias a flodel por los 7 bytes.
Asumiendo que la entrada ya está en
d
.código:
editar: ahora sale correctamente si hay más de 2 duplicados como lo señala aditsu .
fuente
which
ya que[
también acepta un argumento lógico.Python 3 -
3330 bytes{_ for _ in d if d.count(_)>1}
Salida de respuesta,
d
como entrada.fuente
Mathematica,
3129fuente
Pyth, 7 bytes
Explicación:
El filtro elimina todos los elementos que aparecen exactamente una vez del conjunto de elementos.
fuente
LINQ,
6254 bytesUn poco nuevo aquí, pero aquí no pasa nada.
fuente
K (oK) , 7 bytes
Solución:
Pruébalo en línea!
Explicación:
fuente
Shell + GNU coreutils, 12
Prueba de salida:
fuente
Mathematica, 23 bytes
Con entrada almacenada en
d
:Como una función, 24 bytes:
por ejemplo, con
devuelve esto:
(el primer elemento de cada sublista es el elemento, el segundo es la frecuencia de ocurrencia). Aplicar a esta lista lo
Pick[#,#2>1]&@@@
transforma enY donde se devuelve el segundo argumento de
Pick
evalúa alTrue
primer argumento.fuente
K (no K5), 10 bytes
Asume que la entrada está adentro
x
. ¡Pensé que sería divertido hacer una respuesta que no sea K5!fuente
Perl 6, 16 bytes
Suponiendo que la lista esté almacenada
$_
, puede usar cualquiera de los siguientes fragmentos.(que fue permitido específicamente)
Si no le importa que obtenga una bolsa, puede dejarla
keys
.Ninguno de estos tiene la limitación de trabajar solo con enteros con signo, o incluso solo números para el caso.
fuente
Ruby,
3028 bytesEn el interactivo Ruby Shell :
Guardado 2 bytes gracias a Kirill L.
fuente
d.select{|x|d.count(x>1)}|[]
JavaScript,
3528 bytes¡Pruébelo en línea!
Después de publicar esto, me di cuenta de que era muy similar a la solución de w0lf .
fuente
Lisp común, 57 bytes
fuente
Octava, 33 bytes
Aquí está en ideone . He incluido el fragmento en una función para poder llamarlo utilizando todas las entradas de muestra.
fuente
Java 8, 80 bytes
Suponiendo que x contiene la Lista de números de entrada.
fuente
PHP, 35
37bytesMuy claro:
Como nota: no agregué el
;
al final de la línea, como dice la pregunta:Por lo tanto, este fragmento podría usarse así y se evalúa con el resultado correcto:
Otra nota
El código anterior funciona para todos los casos de prueba proporcionados en el desafío. En esos todos los caracteres no únicos son, como máximo, duplicados. Si un elemento puede aparecer más de dos veces,
array_unique()
sería necesario otro , que aumenta la longitud a 49 bytes :Ediciones
array_diff_assoc
conarray_diff_key
. Gracias a Jörg Hülsermann .fuente
array_diff_key
en cambioarray_diff_assoc