Seu objetivo é calcular a interseção definida de duas listas de números inteiros. A interseção é definida como o único grupo não ordenado de números inteiros encontrado pelo menos uma vez na lista de entradas.
Entrada
A entrada pode estar em qualquer formato desejado (parâmetro de função, stdio, etc.) e consiste em duas listas de números inteiros. Muitos não assumem nada sobre cada lista, exceto que eles podem conter um número não negativo de números inteiros (ou seja, eles não são classificados, possivelmente podem conter duplicatas, podem ter comprimentos diferentes e podem até estar vazios). Supõe-se que cada número inteiro se encaixe no tipo de número inteiro assinado nativo do seu idioma, pode ter mais de 1 dígito decimal e está assinado.
Exemplo de entrada:
1 4 3 9 8 8 3 7 0
10 1 4 4 8 -1
Resultado
A saída é qualquer lista de números inteiros representando a interseção definida das duas listas para qualquer formato desejado (valor de retorno, stdio, etc.). Não há requisito para que a saída seja classificada, mas você pode fornecer uma implementação que sempre é classificada. A saída deve formar um conjunto não ordenado válido (por exemplo, não deve conter valores duplicados).
Exemplos de casos de teste (observe que a ordem da saída não é importante):
As duas primeiras linhas são as listas de entrada, a terceira linha é a saída. (empty)
denota a lista vazia.
(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)
Pontuação
Isso é código de golfe; a resposta mais curta em bytes vence.
Furos de loop padrão são proibidos. Você pode usar quaisquer recursos internos não projetados para operações do tipo conjunto.
Recursos internos proibidos:
- definir criação / remover duplicatas
- definir diferença / interseção / união
- Teste de associação generalizada (por exemplo, algo semelhante à
in
palavra - chave em Python,indexOf
funções semelhantes, etc). Observe que o uso de construções "foreach item in list" é permitido (supondo que elas não violem nenhuma das outras restrições), apesar do Python reutilizar ain
palavra-chave para criar essa construção. - Esses embutidos proibidos são "virais", ou seja, se houver um embutido maior contendo algum desses sub-recursos, é igualmente proibido (por exemplo, filtragem por associação em uma lista).
Quaisquer embutidos que não estejam na lista acima são permitidos (por exemplo, classificação, teste de igualdade de números inteiros, inclusão / remoção de lista por índice, filtragem etc.).
Por exemplo, pegue os seguintes dois trechos de exemplo (código semelhante ao 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)
Você pode implementar qualquer um desses recursos semelhantes a um conjunto e eles contarão para sua pontuação.
Sua solução deve ser concluída em um período de tempo razoável (digamos, menos de um minuto em qualquer hardware que você tenha para duas listas com comprimento de 1000 cada).
fonte
Respostas:
Haskell,
4542 bytesExperimente online!
Edit: -2 bytes graças a Ørjan Johansen, -1 byte graças a @dfeuer.
fonte
MATL , 18 bytes
Experimente online!
Isso funciona em duas etapas. Primeiro, a interseção é calculada, possivelmente com duplicatas. Isso se baseia na comparação de todos os elementos de uma matriz com todos os elementos da outra e na manutenção dos elementos da primeira que estão presentes na segunda.
Em seguida, as duplicatas são removidas. Para isso, a matriz da etapa anterior é classificada e as entradas são mantidas se diferentes da anterior. Um
-inf
valor é anexado para que o primeiro valor (ou seja, o mais baixo) não seja perdido.fonte
Gelatina, 13 bytes
Experimente online!
Como funciona
fonte
golflua , 68 caracteres
que é chamado como
Em Lua normal, isso seria
Então, basicamente, eu estou iterando sobre cada elemento das duas tabelas e armazenando apenas os valores equivalentes. Usando o valor como a chave (
k[w]=w
), estou eliminando todas as duplicatas. Em seguida, produzimos a nova tabela iterando sobre o índice e o valor depairs
fonte
JavaScript (ES6), 66 bytes
Sem usar
indexOf
, pois não estou convencido de que seja permitido.fonte
Pitão,
1211 bytesDemonstração
Explicação:
fonte
bash + núcleo GNU, 184 bytes
Invocação:
Resultado:
Nenhuma saída se a interseção estiver vazia. Este script não classifica e verifica a integridade se o primeiro conjunto estiver vazio. Explicação:
Bônus a saber: você pode mudar
grep -o .
para fazer isso com seqüências aleatórias em vez de números.fonte
Perl 6,
2637 bytesuso
Resposta não competitiva atrevida
ou se você gosta de uma
f
função chata e velhafonte
invert
se você pegar os valores. 24 bytesRetina , 63 bytes
As duas últimas linhas removem duplicatas. A entrada são duas listas delimitadas por espaço, separadas por vírgula. A saída é delimitada por espaço em branco.
Experimente online
Se duplicatas na saída forem permitidas, meu programa será de 42 bytes.
fonte
Jq 1.5 , 99 bytes
Expandido
Isso evita o uso de
{}
objetos e, como o jq não possui operações de bit, ele os emula com uma matriz.Experimente online!
fonte
Axioma, 411 bytes
ungolf e teste
fonte
Axioma, 257 bytes
Isso sem o uso de binsearch ... Mas eu não conheço o grande O ... Unglofed e resultados:
Não foram executados muitos testes, portanto podem ser corrigidos ...
fonte
Gelatina , 12 bytes
Experimente online!
fonte
[3]
vez de3
[]
e o elemento para listas singleton. Você pode ir para a página de wiki (átomos) e anexar o Python stringify embutido, mas que faz com que a minha resposta mais longa e rigorosa I / O é burroCasca , 9 bytes
Experimente online!
Observando o código-fonte da Husk no GitHub,
k
("keyon") é implementado como a composição da classificação da lista e do agrupamento de valores adjacentes, portanto, embora eu não consiga encontrar a implementação do "groupOn", é provável que seja seguro assumir que ele não é ' Não faça nada instável, já que Haskell é uma linguagem funcional e o agrupamento de valores iguais adjacentes é uma operação bastante simples de reduzir sobre uma lista vinculada. (Eu posso encontrar a implementação dok
outro tipo de assinatura "keyby", que eu poderia usar aqui mudandoI
para=
, mas não conheço Haskell, então não sei dizer exatamente como ele funciona.)Além disso, uma boa e pequena resposta Brachylog que eu criei antes de perceber que operações de todos os tipos eram proibidas:
⟨∋∈⟩ᵘ
fonte
R,
14183 bytesMelhorado por Giuseppe
Experimente on-line
aquiaquifonte
a
eb
está predefinido, deve aceitar as entradas, assumindo-as como argumentos de função ou a partir de STDIN.Python3, 51 bytes
Se as listas de entrada puderem conter duplicatas:
Python3, 67 bytes
fonte
PHP ,
78, 77 bytesExperimente online!
Sem frescura, mas em conformidade com as regras (eu acho).
Resultado
fonte