Herausforderung
Angenommen, Sie haben eine Liste mit Zahlen und einen Zielwert. Suchen Sie die Menge aller Kombinationen Ihrer Zahlen, die sich zum Zielwert addieren, und geben Sie sie als Listenindizes zurück.
Ein- und Ausgang
Die Eingabe wird eine Liste von Zahlen (nicht unbedingt eindeutig) und eine Zielsummierungsnummer nehmen. Die Ausgabe besteht aus einer Reihe nicht leerer Listen, wobei jede Liste ganzzahlige Werte enthält, die der Position der Werte in der ursprünglichen Eingabeliste entsprechen.
Beispiele
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: [ ]
Wertung
Das ist Code-Golf , also gewinnt der kürzeste Code!
code-golf
permutations
Soapergem
quelle
quelle
Antworten:
Schale , 10 Bytes
1-indiziert. Probieren Sie es online!
Erläuterung
Dies verwendet die neueste Ergänzung zu Husk
η
(auf Indizes einwirken). Die Idee ist, dass manη
eine Funktion höherer Ordnungα
(hier die Inline - Lambda - Funktion) und eine Listex
nimmt undα
die Indexierungsfunktion vonx
(die⁰
im obigen Programm enthalten ist) und die Indizes von aufruftx
. Nimmt beispielsweiseṁ⁰
eine Teilmenge von Indizes, ordnet die Indizierungx
diesen zu und summiert die Ergebnisse.quelle
JavaScript (ES6), 96 Byte
Übernimmt Eingaben in der Currying-Syntax
(list)(target)
.Testfälle
Dies würde im 2. Testfall fehlschlagen, wenn 4.8 und 10 aufgrund eines IEEE 754-Präzisionsfehlers vertauscht würden - dh
14.8 - 4.8 - 10 == 0
aber14.8 - 10 - 4.8 != 0
. Ich denke, das ist in Ordnung , obwohl es irgendwo in Meta eine relevantere Referenz geben kann.Code-Snippet anzeigen
Kommentiert
quelle
reduce
? Ich muss dem zustimmen.Python 2 , 110 Bytes
Probieren Sie es online!
quelle
R ,
8584 BytesProbieren Sie es online!
1-indiziert.
combn
Gibt normalerweise a zurückmatrix
, aber die Einstellungsimplify=F
gibtlist
stattdessen a zurück, sodass wirc
alle Ergebnisse zusammen verketten können.combn(I,i,,F)
gibt alle Indexkombinationen zurück und wir nehmen sieN(l,i,sum)==k
als Index in diese Liste, um diejenigen zu bestimmen, die gleich sindk
.quelle
J ,
3231 BytesProbieren Sie es online!
quelle
4 :'<@I.t#~x=1#.y#~t=.#:}.i.2^#y'
. Probieren Sie es online!Japt , 14 Bytes
Online testen!
Wie es funktioniert
quelle
m,
. Ich hatteÊo à k@VnXx@gX
für die gleiche Bytezahl.Sauber ,
10410298 BytesProbieren Sie es online!
quelle
[1, 2, -1, 5] 0 --> [[],[2,0]]
Ein Satz nicht leerer Listen ist erforderlich.Haskell , 76 Bytes
Probieren Sie es online!
quelle
[1, 2, -1, 5]#0 --> [[],[0,2]]
Ein Satz nicht leerer Listen ist erforderlich.Jelly , 11 Bytes
Probieren Sie es online!
1-indiziert. 4 Bytes für die Rückgabe von Indizes und nicht nur für die Elemente selbst.
-1 Byte danke an user202729
-1 Byte danke an Jonathan Allan
quelle
⁴
ist unnötig, wenn Sieç
anstatt verwendenÇ
.Wolfram-Sprache (Mathematica) , 43 Byte
1-indiziert.
Probieren Sie es online!
quelle
Python 3 , 144 Bytes
Probieren Sie es online!
0-indiziert. 44 Byte werden für die Rückgabe von Indizes und nicht nur für die Elemente selbst ausgegeben.
quelle
Brachylog ,
1815 BytesProbieren Sie es online!
-3 Bytes, weil es jetzt als Generator arbeitet . (Es ist wahrscheinlich möglich, mehr Golf zu spielen, aber die Notwendigkeit, Indizes zu verwenden, ist umständlich.)
quelle
hiᶠ⊇z+ʰXh~t?∧Xt
kommt gleich lang raus.Perl 6 , 45 Bytes
Probier es aus
Erweitert:
quelle
APL (NARS), 49 Zeichen, 98 Byte
1-indiziert; Prüfung:
Kommentar:
quelle
Pyth, 11 Bytes
Versuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .
quelle