Desafio
Suponha que você tenha uma lista de números e um valor alvo. Encontre o conjunto de todas as combinações de seus números que somam o valor alvo, retornando-os como índices da lista.
Entrada e saída
A entrada terá uma lista de números (não necessariamente exclusivos) e um número de soma de destino. A saída será um conjunto de listas não vazias, cada lista contendo valores inteiros correspondentes à posição dos valores na lista de entrada original.
Exemplos
Input: values = [1, 2, 1, 5], target = 8
Output: [ [0,1,3], [1,2,3] ]
Input: values = [4.8, 9.5, 2.7, 11.12, 10], target = 14.8
Output: [ [0,4] ]
Input: values = [7, 8, 9, -10, 20, 27], target = 17
Output: [ [1,2], [0,3,4], [3,5] ]
Input: values = [1, 2, 3], target = 7
Output: [ ]
Pontuação
Isso é código-golfe , então o código mais curto vence!
code-golf
permutations
soapergem
fonte
fonte
Respostas:
Casca , 10 bytes
1 indexado. Experimente online!
Explicação
Isso usa a mais recente adição ao Husk
η
(agir sobre índices). A idéia éη
pegar uma função de ordem superiorα
(aqui a função lambda embutida) e uma listax
e chamarα
a função de indexação dex
(que está⁰
no programa acima) e os índices dex
. Por exemplo,ṁ⁰
pega um subconjunto de índices, mapeia a indexaçãox
sobre eles e soma os resultados.fonte
JavaScript (ES6), 96 bytes
Recebe entrada na sintaxe de currying
(list)(target)
.Casos de teste
Isso falharia no segundo caso de teste se 4,8 e 10 fossem trocados devido a um erro de precisão IEEE 754 - ou seja,
14.8 - 4.8 - 10 == 0
mas14.8 - 10 - 4.8 != 0
. Eu acho que isso está bem , embora possa haver uma referência mais relevante em algum lugar na meta.Mostrar snippet de código
Comentado
fonte
reduce
s? Eu tenho que aprovar isso.Python 2 , 110 bytes
Experimente online!
fonte
R ,
8584 bytesExperimente online!
1 indexado.
combn
geralmente retorna amatrix
, mas a configuraçãosimplify=F
retorna a emlist
vez disso, permitindo que nósc
geremos todos os resultados juntos.combn(I,i,,F)
retorna todas as combinações de índices e levamosN(l,i,sum)==k
como um índice para essa lista para determinar aqueles que são iguaisk
.fonte
J ,
3231 bytesExperimente online!
fonte
4 :'<@I.t#~x=1#.y#~t=.#:}.i.2^#y'
. Experimente online!Japonês , 14 bytes
Teste online!
Como funciona
fonte
m,
. Eu tinhaÊo à k@VnXx@gX
pela mesma contagem de bytes.Limpo ,
10410298 bytesExperimente online!
fonte
[1, 2, -1, 5] 0 --> [[],[2,0]]
É necessário um conjunto de listas não vazias.Haskell , 76 bytes
Experimente online!
fonte
[1, 2, -1, 5]#0 --> [[],[0,2]]
É necessário um conjunto de listas não vazias.Gelatina , 11 bytes
Experimente online!
1 indexado. 4 bytes gastos no retorno de índices, em vez de apenas nos próprios elementos.
-1 byte graças a user202729
-1 byte graças a Jonathan Allan
fonte
⁴
é desnecessário se você usar emç
vez deÇ
.Wolfram Language (Mathematica) , 43 bytes
1 indexado.
Experimente online!
fonte
Python 3 , 144 bytes
Experimente online!
Indexado a 0. 44 bytes gastos no retorno de índices em vez de apenas nos próprios elementos.
fonte
Braquilog ,
1815 bytesExperimente online!
-3 bytes, porque agora funciona como um gerador . (Provavelmente é possível jogar mais, mas contornar a necessidade de usar índices é complicado).
fonte
hiᶠ⊇z+ʰXh~t?∧Xt
sai com o mesmo comprimento.Perl 6 , 45 bytes
Teste-o
Expandido:
fonte
APL (NARS), 49 caracteres, 98 bytes
Indexado 1; teste:
Comente:
fonte
Pitão, 11 bytes
Experimente on-line aqui ou verifique todos os casos de teste de uma vez aqui .
fonte