Votre objectif est de calculer l'intersection définie de deux listes d'entiers. L'intersection est définie comme le groupe unique non ordonné d'entiers trouvé au moins une fois dans les deux listes d'entrée.
Contribution
L'entrée peut être dans n'importe quel format souhaité (paramètre de fonction, stdio, etc.) et se compose de deux listes d'entiers. Vous êtes nombreux à ne pas supposer quoi que ce soit sur chaque liste, sinon qu'ils peuvent contenir un nombre non négatif d'entiers (c'est-à-dire qu'ils ne sont pas triés, peuvent éventuellement contenir des doublons, peuvent avoir des longueurs différentes et peuvent même être vides). Il est supposé que chaque entier rentrera dans le type d'entier natif signé de votre langue, qu'il pourra comporter plus de 1 chiffre décimal et qu'il sera signé.
Exemple d'entrée:
1 4 3 9 8 8 3 7 0
10 1 4 4 8 -1
Production
La sortie est une liste entière d'entiers représentant l'intersection définie des deux listes dans le format souhaité (valeur de retour, stdio, etc.). Il n'est pas nécessaire que la sortie soit triée, mais vous êtes invité à fournir une implémentation qui se trouve toujours être triée. La sortie doit former un ensemble non ordonné valide (par exemple, elle ne doit contenir aucune valeur en double).
Exemples de cas de test (notez que l'ordre de sortie n'est pas important):
Les deux premières lignes sont les listes d'entrée, la troisième ligne est la sortie. (empty)
désigne la liste vide.
(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)
Notation
C'est le golf de code; la réponse la plus courte en octets l'emporte.
Les trous de boucle standard sont interdits. Vous pouvez utiliser toutes les fonctionnalités intégrées non conçues pour des opérations de type ensemble.
Fonctions intégrées interdites:
- création / suppression de doublons
- définir la différence / intersection / union
- Test d'appartenance généralisé (par exemple, quelque chose de similaire au
in
mot - clé dans Python, desindexOf
fonctions similaires , etc.). Notez que l'utilisation des constructions "foreach item in list" est autorisée (en supposant qu'elles ne violent aucune des autres restrictions), malgré le fait que Python réutilise lein
mot - clé pour créer cette construction. - Ces éléments intégrés interdits sont "viraux", c'est-à-dire que s'il existe un élément intégré plus grand contenant l'une de ces sous-fonctionnalités, il est également interdit (par exemple, filtrage par appartenance à une liste).
Tous les éléments intégrés ne figurant pas dans la liste ci-dessus sont autorisés (par exemple, tri, test d'égalité des nombres entiers, ajout / suppression de liste par index, filtrage, etc.).
Par exemple, prenez les deux exemples d'extraits suivants (code de type 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)
Vous êtes invités à implémenter vous-même l'une de ces fonctionnalités de type ensemble et elles compteront pour votre score.
Votre solution devrait se terminer dans un délai raisonnable (disons, moins d'une minute sur le matériel que vous avez pour deux listes ~ longueur 1000 chacune).
la source
Réponses:
Haskell,
4542 octetsEssayez-le en ligne!
Edit: -2 octets grâce à @ Ørjan Johansen, -1 octet grâce à @dfeuer.
la source
MATL , 18 octets
Essayez-le en ligne!
Cela fonctionne en deux étapes. L'intersection est d'abord calculée, éventuellement avec des doublons. Ceci est basé sur la comparaison de tous les éléments d'un tableau avec tous les éléments de l'autre et sur la conservation des éléments du premier présents dans le second.
Ensuite, les doublons sont supprimés. Pour cela, le tableau de l'étape précédente est trié et les entrées sont conservées si différentes de la précédente. Une
-inf
valeur est ajoutée avant que la première valeur (c'est-à-dire la plus basse) ne soit perdue.la source
Gelée, 13 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
golflua , 68 caractères
qui s'appelle comme
Dans Lua régulière, ce serait
Donc, fondamentalement, j'itère sur chaque élément des deux tables et ne stocke que les valeurs équivalentes. En utilisant la valeur comme clé (
k[w]=w
), j'élimine tous les doublons. Nous sortons ensuite la nouvelle table en itérant sur l' indice et la valeur depairs
la source
JavaScript (ES6), 66 octets
Sans utiliser
indexOf
, car je ne suis pas convaincu que ce soit permis.la source
Pyth,
1211 octetsManifestation
Explication:
la source
bash + GNU coreutils, 184 octets
Invocation:
Production:
Aucune sortie si l'intersection est vide. Ce script ne trie pas et vérifie la validité si le premier ensemble est vide. Explication:
Bonus à savoir: vous pouvez changer pour
grep -o .
le faire avec des chaînes aléatoires au lieu de chiffres.la source
Perl 6,
2637 octetsusage
Réponse non compétitive effrontée
ou si vous aimez dans un ennuyeux ol »
f
fonctionla source
invert
si vous prenez les valeurs à la place. 24 octetsRétine , 63 octets
Les deux dernières lignes suppriment les doublons. L'entrée est constituée de deux listes séparées par des espaces séparées par une virgule. La sortie est séparée par des espaces.
Essayez-le en ligne
Si les doublons dans la sortie sont autorisés, mon programme serait de 42 octets.
la source
Jq 1,5 , 99 octets
Étendu
Cela évite d'utiliser des
{}
objets et puisque jq n'a pas d'opérations sur les bits, cela les émule avec un tableau.Essayez-le en ligne!
la source
Axiome, 411 octets
ungolf et test
la source
Axiome, 257 octets
Ceci sans l'utilisation de binsearch ... Mais je ne connais pas le grand O ... Unglofed et les résultats:
Pas exécuté beaucoup de tests donc pourrait être buggé ...
la source
Gelée , 12 octets
Essayez-le en ligne!
la source
[3]
au lieu de3
[]
et l'élément pour les listes singleton. Vous pouvez aller sur la page wiki (atomes) et ajouter le module intégré Python Stringify, mais cela rend ma réponse plus longue et stricte, les E / S sont stupidesHusk , 9 octets
Essayez-le en ligne!
La recherche dans le code source de Husk sur GitHub,
k
("keyon") est implémentée comme la composition du tri de la liste et du regroupement des valeurs adjacentes, donc bien que je ne puisse pas réellement trouver l'implémentation de "groupOn", il est probablement sûr de supposer qu'il ne fonctionne pas ' t ne rien faire, car Haskell est un langage fonctionnel et le regroupement de valeurs égales adjacentes est une opération assez simple de réduction sur une liste liée. (Je peux trouver l'implémentation dek
l'autre type de signature "keyby", que je pourrais utiliser ici en changeantI
en=
, mais je ne connais pas Haskell, donc je ne peux pas dire exactement comment cela fonctionne.)Aussi, une belle petite réponse Brachylog que j'ai trouvée avant de réaliser que les opérations de set de toutes sortes étaient interdites:
⟨∋∈⟩ᵘ
la source
R,
14183 octetsAmélioré par Giuseppe
Essayez en ligne
iciicila source
a
etb
êtes prédéfini, vous devez accepter l'entrée, soit en les prenant comme arguments de fonction, soit depuis STDIN.Python3, 51 octets
Si les listes d'entrée peuvent contenir des doublons:
Python3, 67 octets
la source
PHP ,
78, 77 octetsEssayez-le en ligne!
Pas de fioritures, mais conforme aux règles (je pense).
Production
la source