Dado un conjunto de n
elementos, el desafío es escribir una función que enumere todas las combinaciones de k
elementos de este conjunto.
Ejemplo
Set: [1, 7, 4]
Input: 2
Output: [1,7], [1,4], [7,4]
Ejemplo
Set: ["Charlie", "Alice", "Daniel", "Bob"]
Input: 2
Output ["Daniel", "Bob"], ["Charlie", "Alice"], ["Alice", "Daniel"], ["Charlie", "Daniel"], ["Alice", "Bob"], ["Charlie", "Bob"]
Reglas (editadas)
- El orden de salida es de su elección.
- La entrada puede ser cualquier tipo de datos. Pero la salida debe ser del mismo tipo que la entrada. Si la entrada es una lista de enteros, la salida también debería ser una lista de enteros. Si la entrada es una cadena (matriz de caracteres), la salida también debería ser una cadena.
- El código debería funcionar con cualquier número de variables de entrada.
- Puedes usar cualquier lenguaje de programación.
- La respuesta también debería poder usar cualquier cosa (string, int, double ...) como entrada y salida.
- Se prohíbe cualquier función integrada que esté relacionada con combinaciones y permutaciones.
- El código más corto gana (en términos de bytes).
- Desempate: votos.
- Duración: 1 semana.
PD Tenga cuidado con las entradas extremas como números negativos, 0, etc.
combos('ab', 1) -> ['a', 'b']
válido?Respuestas:
Haskell -
5746 bytesAdelante, golfscripters.
Caso de uso (la misma función funciona polimórficamente):
fuente
Pitón (72)
La función
f
toma una listaS
y el númerok
y devuelve una lista de todas las sub-listas de longitudk
deS
. En lugar de enumerar todos los subconjuntos y luego filtrar por tamaño, solo obtengo los subconjuntos del tamaño necesario en cada paso.Me gustaría ir
S.pop()
a trabajar para combinar obtenerS[:1]
con pasarS[1:]
más tarde, pero parece consumir demasiado la lista.Para evitar la objeción, cualquiera de estas soluciones de Python rompe la regla de que "el código debería funcionar en cualquier número de variables de entrada" debido a los límites de recursión, notaré que la implementación de Stackless Python no tiene límites de recursión (aunque en realidad no he probado este código con él).
Demostración:
fuente
Mathematica 10, 70 caracteres
Solo una traducción de la respuesta de Haskell.
Uso:
fuente
Carbón , 23 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Python - 129
s es una lista, k es el tamaño de las combinaciones a producir.
fuente
Python, 102
Llame a c para ejecutar:
Obtiene todas las permutaciones de la lista sy filtra las que tienen longitud k.
fuente
Pyth , 28
Esto se basa (en gran medida) en la respuesta de Haskell.
Explicación:
Nota: Si bien la versión más reciente de Pyth, 1.0.9, se lanzó esta noche y, por lo tanto, no es elegible para este desafío, el mismo código funciona bien en 1.0.8.
fuente
Haskell + Data.List , 44 bytes
Pruébalo en línea!
La respuesta 46 bytes es bastante difícil de superar, pero si usted tiene
tails
deData.List
que puede hacer 44 bytes.fuente
05AB1E ,
1413 bytesInspirado por la respuesta de @Neil 's Charcoal , ¡así que asegúrate de votarlo!
Pruébelo en línea o verifique algunos casos de prueba más .
Si se permitieran las incorporaciones, esto podría haber sido 2 bytes :
Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
fuente
APL (NARS), 80 caracteres, 160 bytes
prueba y cómo usarlo:
la salida parece estar bien ... pero los errores son posibles ...
En la práctica, devuelve void set como Zilde si la entrada alfa está fuera de rango; si alfa es 1, devuelve todos los elementos de su conjunto (¿es correcto?);
Esto a continuación parece un par de char menos pero 2 veces más lento arriba:
fuente
JS -
117188Método de matriz locura
fuente
C # (compilador interactivo de Visual C #) , 141 bytes
Lamentablemente, Tio / Mono no parece admitir la declaración genérica de tipo T , por lo que me veo obligado a perder algunos bytes con el tipo de objeto .
Pruébalo en línea!
fuente