Dado um conjunto de n
elementos, o desafio é escrever uma função que lista todas as combinações de k
elementos deste conjunto.
Exemplo
Set: [1, 7, 4]
Input: 2
Output: [1,7], [1,4], [7,4]
Exemplo
Set: ["Charlie", "Alice", "Daniel", "Bob"]
Input: 2
Output ["Daniel", "Bob"], ["Charlie", "Alice"], ["Alice", "Daniel"], ["Charlie", "Daniel"], ["Alice", "Bob"], ["Charlie", "Bob"]
Regras (editadas)
- A ordem da saída é de sua escolha.
- A entrada pode ser qualquer tipo de dado. Mas a saída deve ser do mesmo tipo que a entrada. Se a entrada for uma lista de números inteiros, a saída também deverá ser uma lista de números inteiros. Se a entrada for uma string (matriz de caracteres), a saída também deverá ser uma string.
- O código deve funcionar com qualquer número de variáveis de entrada.
- Você pode usar qualquer linguagem de programação.
- A resposta deve ser capaz de usar qualquer coisa (string, int, duplo ...) como entrada e saída também.
- Quaisquer funções integradas relacionadas a combinações e permutações são proibidas.
- O menor código vence (em termos de bytes).
- Desempate: votos.
- Duração: 1 semana.
PS Cuidado com as entradas extremas , como números negativos, 0, etc.
combos('ab', 1) -> ['a', 'b']
válido?Respostas:
Haskell -
5746 bytesVamos lá, golfscripters.
Caso de uso (a mesma função funciona polimorficamente):
fonte
Python (72)
A função
f
pega uma listaS
e um númerok
e retorna uma lista de todas as sublistas de comprimentok
deS
. Em vez de listar todos os subconjuntos e, em seguida, filtrar por tamanho, só recebo os subconjuntos do tamanho necessário a cada etapa.Eu gostaria de começar
S.pop()
a trabalhar para combinar ficarS[:1]
com a passagemS[1:]
mais tarde, mas parece consumir muito a lista.Para impedir a objeção, qualquer solução Python quebra a regra de que "O código deve funcionar em qualquer número de variáveis de entrada" por causa dos limites de recursão, observarei que a implementação do Stackless Python não tem limites de recursão (embora eu não tenha realmente testado este código).
Demonstração:
fonte
Mathematica 10, 70 caracteres
Apenas uma tradução da resposta de Haskell.
Uso:
fonte
Carvão , 23 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Python - 129
s é uma lista, k é o tamanho das combinações a serem produzidas.
fonte
Python, 102
Chame c para executar:
Ele obtém todas as permutações da lista se filtra aquelas com comprimento k.
fonte
Pyth , 28
Isto é (fortemente) baseado na resposta de Haskell.
Explicação:
Nota: Embora a versão mais recente do Pyth, 1.0.9, tenha sido lançada hoje à noite e, portanto, não seja elegível para esse desafio, o mesmo código funciona bem no 1.0.8.
fonte
Haskell + Data.List , 44 bytes
Experimente online!
A resposta 46 byte é muito difícil de bater, mas se tiver
tails
deData.List
que você pode fazer 44 bytes.fonte
05AB1E ,
1413 bytesInspirado na resposta do @Neil 's Charcoal , certifique-se de votar nele!
Experimente online ou verifique mais alguns casos de teste .
Se builtins fossem permitidos, isso poderia ter sido de 2 bytes :
Experimente online ou verifique mais alguns casos de teste .
Explicação:
fonte
APL (NARS), 80 caracteres, 160 bytes
teste e como usá-lo:
a saída parece ok ... mas são possíveis erros ...
Na prática, ele retorna nulo definido como Zilde se a entrada alfa estiver fora da faixa; se alfa for 1, ele retornará todos os elementos em seu conjunto (está certo?);
Abaixo, parece um par de caracteres a menos, mas 2x mais lento acima:
fonte
JS - 117
188Loucura do método Array
fonte
C # (compilador interativo do Visual C #) , 141 bytes
Infelizmente, o Tio / Mono parece não suportar a declaração genérica do tipo T , então sou forçado a perder alguns bytes com o tipo de objeto .
Experimente online!
fonte