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).