Wyzwanie
Załóżmy, że masz listę liczb i wartość docelową. Znajdź zestaw wszystkich kombinacji swoich liczb, które składają się na wartość docelową, zwracając je jako indeksy listy.
Wejście i wyjście
Dane wejściowe przyjmą listę liczb (niekoniecznie unikalną) i docelową liczbę sumowania. Dane wyjściowe będą zbiorem niepustych list, z których każda zawiera wartości całkowite odpowiadające pozycji wartości na oryginalnej liście wejściowej.
Przykłady
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: [ ]
Punktacja
To jest kod-golf , więc wygrywa najkrótszy kod!
code-golf
permutations
Soergergem
źródło
źródło
Odpowiedzi:
Łuska , 10 bajtów
1-indeksowany. Wypróbuj online!
Wyjaśnienie
Wykorzystuje najnowszy dodatek do Husk,
η
(działaj na indeksach). Chodzi o to, żeη
pobiera funkcję wyższego rzęduα
(tutaj wbudowaną funkcję lambda) i listęx
oraz wywołujeα
funkcję indeksowaniax
(która jest⁰
w powyższym programie) i indeksyx
. Na przykładṁ⁰
bierze podzbiór indeksów, mapuje indeksyx
nad nimi i sumuje wyniki.źródło
JavaScript (ES6), 96 bajtów
Pobiera dane wejściowe w składni curry
(list)(target)
.Przypadki testowe
Nie udałoby się to w drugim przypadku testowym, gdyby 4.8 i 10 zostały zamienione z powodu błędu precyzji IEEE 754 - tzn .
14.8 - 4.8 - 10 == 0
Ale14.8 - 10 - 4.8 != 0
. Myślę, że to jest w porządku , chociaż może być bardziej odpowiednie odniesienie gdzieś w meta.Pokaż fragment kodu
Skomentował
źródło
reduce
? Muszę to zagłosować.Python 2 , 110 bajtów
Wypróbuj online!
źródło
R ,
8584 bajtówWypróbuj online!
1-indeksowany.
combn
zwykle zwraca amatrix
, ale ustawieniesimplify=F
zwracalist
zamiast tego, co pozwala nam nac
łączenie wszystkich wyników razem.combn(I,i,,F)
zwraca wszystkie kombinacje indeksów i bierzemyN(l,i,sum)==k
jako indeks do tej listy, aby określić te, które są równek
.źródło
J ,
3231 bajtówWypróbuj online!
źródło
4 :'<@I.t#~x=1#.y#~t=.#:}.i.2^#y'
. Wypróbuj online!Japt , 14 bajtów
Przetestuj online!
Jak to działa
źródło
m,
. MiałemÊo à k@VnXx@gX
taką samą liczbę bajtów.Czysty ,
10410298 bajtówWypróbuj online!
źródło
[1, 2, -1, 5] 0 --> [[],[2,0]]
Wymagany jest zestaw niepustych list.Haskell , 76 bajtów
Wypróbuj online!
źródło
[1, 2, -1, 5]#0 --> [[],[0,2]]
Wymagany jest zestaw niepustych list.Galaretka , 11 bajtów
Wypróbuj online!
1-indeksowany. 4 bajty wydane na zwracanie indeksów, a nie tylko same elementy.
-1 bajt dzięki użytkownikowi202729
-1 bajt dzięki Jonathan Allan
źródło
⁴
Jest niepotrzebny, jeśli używaszç
zamiastÇ
.Wolfram Language (Mathematica) , 43 bajty
1-indeksowany.
Wypróbuj online!
źródło
Python 3 , 144 bajty
Wypróbuj online!
0-indeksowane. 44 bajty wydane na zwracanie indeksów, a nie tylko same elementy.
źródło
Brachylog ,
1815 bajtówWypróbuj online!
-3 bajty, ponieważ teraz działa jako generator . (Prawdopodobnie można grać w golfa więcej, ale obejście potrzeby używania indeksów jest niewygodne.)
źródło
hiᶠ⊇z+ʰXh~t?∧Xt
wychodzi na tę samą długość.Perl 6 , 45 bajtów
Sprawdź to
Rozszerzony:
źródło
APL (NARS), 49 znaków, 98 bajtów
1-indeksowany; test:
komentarz:
źródło
Pyth, 11 bajtów
Spróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .
źródło