Su objetivo es calcular la intersección establecida de dos listas de enteros. La intersección se define como el grupo único de enteros no ordenados que se encuentra al menos una vez en ambas listas de entrada.
Entrada
La entrada puede estar en cualquier formato deseado (parámetro de función, stdio, etc.) y consta de dos listas de enteros. Es posible que no asuma nada sobre cada lista, aparte de que pueden contener cualquier número no negativo de enteros (es decir, no están clasificados, posiblemente pueden contener duplicados, pueden tener diferentes longitudes e incluso pueden estar vacíos). Se supone que cada número entero encajará en el tipo de entero con signo nativo de su idioma, puede tener más de 1 dígito decimal de longitud y está firmado.
Entrada de ejemplo:
1 4 3 9 8 8 3 7 0
10 1 4 4 8 -1
Salida
La salida es cualquier lista de enteros que representa la intersección establecida de las dos listas en cualquier formato deseado (valor de retorno, stdio, etc.). No es necesario que se ordene la salida, aunque puede proporcionar una implementación que siempre se ordena. La salida debe formar un conjunto no ordenado válido (por ejemplo, no debe contener ningún valor duplicado).
Ejemplos de casos de prueba (tenga en cuenta que el orden de salida no es importante):
Las primeras dos líneas son las listas de entrada, la tercera línea es la salida. (empty)
denota la lista vacía.
(empty)
(empty)
(empty)
1000
(empty)
(empty)
3 1 2 4 3 1 1 1 1 3
3 1 -1 0 8 3 3 1
1 3
1 2 1
3 3 4
(empty)
Puntuación
Este es el código de golf; La respuesta más corta en bytes gana.
Los agujeros de bucle estándar están prohibidos. Puede usar cualquier función incorporada que no esté diseñada para operaciones similares a las de un conjunto.
Funciones incorporadas prohibidas:
- establecer creación / eliminar duplicados
- establecer diferencia / intersección / unión
- Pruebas de membresía generalizadas (por ejemplo, algo similar a la
in
palabra clave en Python,indexOf
funciones similares, etc.). Tenga en cuenta que el uso de construcciones de "elemento foreach en la lista" está permitido (suponiendo que no violen ninguna de las otras restricciones), a pesar de que Python reutiliza lain
palabra clave para crear esta construcción. - Estas incorporaciones prohibidas son "virales", es decir, si hay una función incorporada más grande que contenga alguna de estas subcaracterísticas, está igualmente prohibida (por ejemplo, filtrado por membresía en una lista).
Se permiten todos los elementos integrados que no están en la lista anterior (por ejemplo, clasificación, prueba de igualdad de enteros, lista anexar / eliminar por índice, filtrado, etc.).
Por ejemplo, tome los siguientes dos fragmentos de ejemplo (código similar a Python):
# prohibited: filters by testing if each value in tmpList is a member of listA
result = tmpList.filter(listA)
# ok: filtering by a lambda which manually iterates over listA and checks for equality
def my_in_func(val, slist):
for a in slist:
if(val == a):
return True
return False
result = filter(lambda v: my_in_func(val, listA), tmpList)
Le invitamos a implementar cualquiera de estas características de conjunto usted mismo y contarán para su puntaje.
Su solución debe completarse en un período de tiempo razonable (digamos, menos de un minuto en cualquier hardware que tenga para dos listas ~ 1000 de longitud cada una).
fuente
Respuestas:
Haskell,
4542 bytesPruébalo en línea!
Editar: -2 bytes gracias a @ Ørjan Johansen, -1 byte gracias a @dfeuer.
fuente
MATL , 18 bytes
Pruébalo en línea!
Esto funciona en dos pasos. Primero se calcula la intersección, posiblemente con duplicados. Esto se basa en comparar todos los elementos de una matriz con todos los elementos de la otra y mantener elementos de la primera que están presentes en la segunda.
Luego se eliminan los duplicados. Para esto, se ordena la matriz del paso anterior y las entradas se mantienen si son diferentes de las anteriores. Se
-inf
antepone un valor para que el primer valor (es decir, el más bajo) no se pierda.fuente
Jalea, 13 bytes
Pruébalo en línea!
Cómo funciona
fuente
golflua , 68 caracteres
que se llama como
En Lua regular, esto sería
Entonces, básicamente, estoy iterando sobre cada elemento de las dos tablas y solo almacenando los valores equivalentes. Al usar el valor como la clave (
k[w]=w
), estoy eliminando todos los duplicados. Luego sacamos la nueva tabla iterando sobre el índice y el valor depairs
fuente
JavaScript (ES6), 66 bytes
Sin usar
indexOf
, ya que no estoy convencido de que esté permitido.fuente
Pyth,
1211 bytesDemostración
Explicación:
fuente
bash + GNU coreutils, 184 bytes
Invocación:
Salida:
No hay salida si la intersección está vacía. Este script no ordena y realiza una comprobación de cordura si el primer conjunto está vacío. Explicación:
Bonificación para saber: puede cambiar
grep -o .
para hacer esto con cadenas aleatorias en lugar de números.fuente
Perl 6,
2637 bytesuso
Descarada respuesta no competitiva
o si te gusta en una
f
función aburridafuente
invert
si toma los valores en su lugar. 24 bytesRetina , 63 bytes
Las dos últimas líneas eliminan duplicados. La entrada es dos listas delimitadas por espacios separadas por una coma. La salida está delimitada por espacios en blanco.
Pruébalo en línea
Si se permiten duplicados en la salida, mi programa tendría 42 bytes.
fuente
Jq 1.5 , 99 bytes
Expandido
Esto evita el uso de
{}
objetos y dado que jq no tiene operaciones de bits, los emula con una matriz.Pruébalo en línea!
fuente
Axioma, 411 bytes
ungolf y prueba
fuente
Axioma, 257 bytes
Esto sin el uso de binsearch ... Pero no sé el gran O ... Unglofed y los resultados:
No se ejecutaron muchas pruebas, por lo que podría tener errores ...
fuente
Jalea , 12 bytes
Pruébalo en línea!
fuente
[3]
lugar de3
[]
y el elemento para listas singleton. Puede ir a la página wiki (átomos) y agregar el Python Stringify incorporado, pero eso hace que mi respuesta sea más larga y la E / S estricta es tontaCasco , 9 bytes
Pruébalo en línea!
Mirando el código fuente de Husk en GitHub,
k
("keyon") se implementa como la composición de ordenar la lista y agrupar valores adyacentes, por lo que aunque no puedo encontrar la implementación de "groupOn", probablemente sea seguro asumir que no lo hace. No haga nada, ya que Haskell es un lenguaje funcional y la agrupación de valores iguales adyacentes es una operación bastante sencilla de reducción de una lista enlazada. (I puedo encontrar la puesta en práctica dek
's otro tipo de firma 'keyby', que podría utilizar aquí cambiandoI
a=
, pero no sé Haskell así que no puedo decir cómo funciona exactamente.)Además, una pequeña y agradable respuesta de Brachylog que se me ocurrió antes de darme cuenta de que no se permitieron operaciones de todo tipo:
⟨∋∈⟩ᵘ
fuente
R
14183 bytesMejorado por Giuseppe
Probar en línea
aquíaquífuente
a
yb
están predefinidas, debe aceptar entradas, ya sea tomándolas como argumentos de función o desde STDIN.Python3, 51 bytes
Si las listas de entrada pueden contener duplicados:
Python3, 67 bytes
fuente
PHP ,
78, 77 bytesPruébalo en línea!
Sin lujos, pero cumple con las reglas (creo).
Salida
fuente