Étant donné un ensemble d' n
éléments, le défi consiste à écrire une fonction qui répertorie toutes les combinaisons d' k
éléments de cet ensemble.
Exemple
Set: [1, 7, 4]
Input: 2
Output: [1,7], [1,4], [7,4]
Exemple
Set: ["Charlie", "Alice", "Daniel", "Bob"]
Input: 2
Output ["Daniel", "Bob"], ["Charlie", "Alice"], ["Alice", "Daniel"], ["Charlie", "Daniel"], ["Alice", "Bob"], ["Charlie", "Bob"]
Règles (édité)
- L'ordre de sortie est de votre choix.
- L'entrée peut être n'importe quel type de données. Mais la sortie doit être du même type que l'entrée. Si l'entrée est une liste d'entiers, la sortie doit également être une liste d'entiers. Si l'entrée est une chaîne (tableau de caractères), la sortie doit également être une chaîne.
- Le code doit fonctionner avec n'importe quel nombre de variables d'entrée.
- Vous pouvez utiliser n'importe quel langage de programmation.
- La réponse devrait également pouvoir utiliser n'importe quoi (chaîne, entier, double ...) comme entrée et sortie.
- Toutes les fonctions intégrées liées aux combinaisons et permutations sont interdites.
- Le code le plus court gagne (en termes d'octets).
- Tiebreaker: votes.
- Durée: 1 semaine.
PS Faites attention aux entrées extrêmes telles que les nombres négatifs, 0, etc.
combos('ab', 1) -> ['a', 'b']
valide?Réponses:
Haskell -
5746 octetsApportez-le, golfscripters.
Cas d'utilisation (la même fonction fonctionne de manière polymorphe):
la source
Python (72)
La fonction
f
prend une listeS
et un nombrek
et renvoie une liste de toutes les sous-listes de longueurk
deS
. Plutôt que de répertorier tous les sous-ensembles, puis de filtrer par taille, je n'obtiens que les sous-ensembles de la taille requise à chaque étape.Je voudrais me mettre
S.pop()
au travail afin de combiner arriverS[:1]
avec passerS[1:]
plus tard, mais cela semble consommer trop la liste.Pour anticiper l'objection, une telle solution Python enfreint la règle selon laquelle "le code devrait fonctionner dans n'importe quel nombre de variables d'entrée" en raison des limites de récursivité, je noterai que l' implémentation Stackless Python n'a pas de limites de récursivité (bien que je n'ai pas réellement testé ce code avec lui).
Manifestation:
la source
Mathematica 10, 70 caractères
Juste une traduction de la réponse Haskell.
Usage:
la source
Fusain , 23 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
Python - 129
s est une liste, k est la taille des combinaisons à produire.
la source
Python, 102
Appelez c pour exécuter:
Il obtient toutes les permutations de la liste s et filtre celles de longueur k.
la source
Pyth , 28
Ceci est (fortement) basé sur la réponse Haskell.
Explication:
Remarque: Bien que la version la plus récente de Pyth, 1.0.9, soit sortie ce soir, et ne soit donc pas éligible pour ce défi, le même code fonctionne correctement dans 1.0.8.
la source
Haskell + Data.List , 44 octets
Essayez-le en ligne!
La réponse de 46 octets est assez difficile à battre , mais si vous avez
tails
deData.List
vous pouvez faire 44 octets.la source
05AB1E ,
1413 octetsInspiré par la réponse au charbon de bois de @Neil , alors assurez-vous de lui donner un vote positif!
Essayez-le en ligne ou vérifiez quelques cas de test supplémentaires .
Si les builtins étaient autorisés, cela aurait pu être de 2 octets :
Essayez-le en ligne ou vérifiez quelques cas de test supplémentaires .
Explication:
la source
APL (NARS), 80 caractères, 160 octets
test et comment l'utiliser:
la sortie semble correcte ... mais un bug est possible ...
En pratique, il renvoie un ensemble vide défini comme Zilde si l'entrée alpha est hors plage; si alpha vaut 1, il renvoie tous les éléments dans son ensemble (est-ce vrai?);
Ceci en dessous, il semble un couple de caractères de moins mais 2x plus lent au-dessus:
la source
JS - 117
188La folie de la méthode des tableaux
la source
C # (Visual C # Interactive Compiler) , 141 octets
Malheureusement, Tio / Mono ne semble pas prendre en charge la déclaration générique de type T , donc je suis obligé de perdre quelques octets avec le type d' objet à la place.
Essayez-le en ligne!
la source