Denken Sie daran, dass ein Satz ohne Duplikate ungeordnet ist.
Definition Eine N- eindeutig additive Menge S, deren Länge K ist, ist eine Menge, so dass alle N- Längen-Teilmengen in S zu unterschiedlichen Zahlen summieren. Mit anderen Worten, die Summen aller N- Längen-Teilmengen von S sind alle verschieden.
Ziel Wenn ein Array / Set als Eingabe und eine Zahl N
für eine Funktion oder ein vollständiges Programm in einem vernünftigen Format angegeben ist, können Sie einen Wahrheits- oder False-Wert finden und zurückgeben oder ausgeben (Fehler für False ist in Ordnung), der angibt, ob die Eingabe N - ist oder nicht. einzigartig additiv.
Sie können davon ausgehen, dass jedes Element höchstens einmal angezeigt wird und dass sich jede Zahl im nativen Datentyp Ihrer Sprache befindet. Bei Bedarf können Sie auch davon ausgehen, dass die Eingabe sortiert ist. Zuletzt können Sie das annehmen 0 < N <= K
.
Beispiele
Betrachten wir die Menge S = {1, 2, 3, 5}
und N = 2
. Hier sind alle Summen aller eindeutigen Paare S
(für die eindeutigen sind die einzigen, die für Summen von Interesse sind):
1 + 2 = 3
1 + 3 = 4
1 + 5 = 6
2 + 3 = 5
2 + 5 = 7
3 + 5 = 8
Wir können sehen, dass es keine Duplikate in der Ausgabe gibt, also ist S 2-eindeutig additiv.
Betrachten wir nun die Menge T = {12, 17, 44, 80, 82, 90}
und N = 4
. Hier sind alle möglichen Summen der Länge vier:
12 + 17 + 44 + 80 = 153
12 + 17 + 44 + 82 = 155
12 + 17 + 44 + 90 = 163
12 + 17 + 80 + 82 = 191
12 + 17 + 80 + 90 = 199
12 + 17 + 82 + 90 = 201
12 + 44 + 80 + 82 = 218
12 + 44 + 80 + 90 = 226
12 + 44 + 82 + 90 = 228
12 + 80 + 82 + 90 = 264
17 + 44 + 80 + 82 = 223
17 + 44 + 80 + 90 = 231
17 + 44 + 82 + 90 = 233
17 + 80 + 82 + 90 = 269
44 + 80 + 82 + 90 = 296
Sie sind alle einzigartig, und so ist T 4-einzigartig additiv.
Testfälle
[members], N => output
[1, 4, 8], 1 => true
[1, 10, 42], 1 => true ; all sets trivially satisfy N = 1
[1, 2, 3, 4], 3 => true
[1, 2, 3, 4, 5], 5 => true
[1, 2, 3, 5, 8], 3 => true
[1, 2, 3, 4, 5], 2 => false ; 1 + 4 = 5 = 2 + 3
[-2, -1, 0, 1, 2], 3 => false ; -2 + -1 + 2 = -1 = -2 + 0 + 1
[1, 2, 3, 5, 8, 13], 3 => false ; 1 + 2 + 13 = 16 = 3 + 5 + 8
[1, 2, 4, 8, 16, 32], 3 => true
[1, 2, 4, 8, 16, 32], 4 => true
[1, 2, 4, 8, 16, 32], 5 => true
[1, 2, 4, 8, 16, 32], 6 => true
[3, 4, 7, 9, 12, 16, 18], 6 => true
[3, 4, 7, 9, 12, 16, 18], 3 => false ; 3 + 4 + 12 = 19 = 3 + 7 + 9
quelle
N <= K
?falsey
?Antworten:
MATL , 7 Bytes
Probieren Sie es online aus!
Rückgabe
true
(angezeigt als1
) oderfalse
(angezeigt als0
).quelle
Gelee, 7 Bytes
Probieren Sie es online aus!
Gibt eine positive Zahl für wahr und null für falsch zurück.
quelle
Matlab, 78 Bytes
Diese Funktion gibt (tatsächlich
n
) einen positiven Wert für true zurück und gibt einen Fehler als falsche Antwort zurück (gültig gemäß diesem Kommentar ).Erläuterung:
quelle
k
. PS: Das Hervorheben der Matlab-Syntax funktioniert endlich !!!n
!Pyth, 8 Bytes
Testsuite.
quelle
splat
dasQ
am Ende erforderte .Haskell, 69 Bytes
Anwendungsbeispiel:
6 # [3,4,7,9,12,16,18]
->True
.Direkte Implementierung der Definition: Erstellen Sie eine Liste der Summen aller Teilsequenzen der Länge n und prüfen Sie, ob sie sich mit entfernten Duplikaten gleichsetzen.
quelle
JavaScript (ES6), 132 Byte
Baut die additiven Listen von 1 bis n auf und überprüft dann die letzte auf Eindeutigkeit.
quelle
Brachylog , 20 Bytes
Erwartet eine Liste, die die Liste und dann die Ganzzahl als Eingabe und keine Ausgabe enthält, z
run_from_atom(':{[L:I]hs.lI}f:+aLdL', [[1:2:3:5]:2]).
.Erläuterung
Hauptprädikat
Prädikat 1: Finden Sie alle geordneten Teilmengen mit fester Länge einer Liste
quelle
Julia,
4641 BytesProbieren Sie es online aus!
Wie es funktioniert
Dies definiert den Binäroperator
\
für Array / Int-Argumente (neu) .combinations(x,n)
Gibt alle Arrays von genau n verschiedenen Elementen von x zurück . Wir ordnensum
diese Arrays zu und speichern das Ergebnis in t .t∪t
führt die gesetzte Vereinigung des Arrays t mit sich selbst durch, wasunique
in diesem Fall wie die längere funktioniert .Schließlich haben wir vergleichen t mit der deduplizierten t , Rückkehr ,
true
wenn und nur wenn alle Summen unterschiedlich sind.quelle
Python, 89 Bytes
Testen Sie es auf Ideone .
Wie es funktioniert
c(s,n)
listet alle n- Kombinationen von s auf , dh alle Listen von n verschiedenen Elementen von s . Wir ordnensum
die resultierenden Listen zu und berechnen so alle möglichen Summen von Unterlisten der Länge n .Nach den Stationen
c(...,2)
erstellen wir alle Paare der resultierenden Summen. Wenn zwei Summen x und y gleich sind,x^y
kehrt 0 undall
kehrt Falsch . Umgekehrt, wenn alle Summen einzigartig sind,x^y
wird es immer sein truthy, undany
wird wieder wahr .quelle
J, 34 Bytes
Für den einfachen Ansatz ist nur das
stats
Add-On für diecomb
Funktion erforderlich . Gibt0
für false und1
für true zurück.Als Alternative zur Verwendung des integrierten
comb
Geräts gibt es eine 38-Byte- Lösung, die den Leistungssatz generiert und die Teilmengen der Größe n auswählt .Verwendungszweck
quelle
stats
Modul. Sehr schön!Ruby , 50 Bytes
Probieren Sie es online aus!
Wenn alle Elemente eindeutig sind, wird
uniq!
zurückgegebennil
. Das Negieren dieses Ergebnisses wie in ergibt!(...).uniq!
einen schönen Einzigartigkeitstest.Diese Frage wurde einige Wochen vor der Einführung von Ruby 2.4.0-Preview1 gestellt, wodurch
Enumerable#sum
hier 9 Bytes eingespart würden.41 Bytes (Ruby 2.4+)
Probieren Sie es online aus!
quelle
R 41 Bytes
Summiert alle n-Längen-Teilmengen von s und prüft, ob alle Werte in einer Kontingenztabelle dieser Summen 1 sind (alle Summen sind eindeutig).
Probieren Sie es online aus!
quelle