N'oubliez pas qu'un ensemble n'est pas ordonné sans doublons.
Définition Un ensemble N à additif unique S dont la longueur est K est un ensemble tel que tous les sous-ensembles de longueur N dans S totalisent des nombres différents. En d'autres termes, les sommes de tous les sous-ensembles de longueur N de S sont toutes distinctes.
Objectif Étant donné un tableau / ensemble en entrée et un numéro N
pour une fonction ou un programme complet dans n'importe quel format raisonnable, rechercher et renvoyer ou sortir une valeur véridique ou falsey (l'erreur pour falsey est correcte) indiquant si l'entrée est N ou non - additif unique.
Vous pouvez supposer que chaque élément n'apparaît qu'une seule fois et que chaque numéro se trouve dans le type de données natif de votre langue. Si nécessaire, vous pouvez également supposer que l'entrée est triée. Enfin, vous pouvez supposer cela 0 < N <= K
.
Exemples
Considérons l'ensemble S = {1, 2, 3, 5}
et N = 2
. Voici toutes les sommes de toutes les paires uniques S
(car les seules sont les seules intéressantes pour les sommes):
1 + 2 = 3
1 + 3 = 4
1 + 5 = 6
2 + 3 = 5
2 + 5 = 7
3 + 5 = 8
Nous pouvons voir qu'il n'y a pas de doublons en sortie, donc S est 2-uniquement additif.
Considérons maintenant l'ensemble T = {12, 17, 44, 80, 82, 90}
et N = 4
. Voici toutes les sommes possibles de longueur quatre:
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
Ils sont tous uniques, et T est donc un additif 4-unique.
Cas de test
[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
la source
N <= K
?falsey
?Réponses:
MATL , 7 octets
Essayez-le en ligne!
Renvoie
true
(affiché comme1
) oufalse
(affiché comme0
).la source
Gelée, 7 octets
Essayez-le en ligne!
Renvoie un nombre positif pour true et zéro pour falsey.
la source
Matlab, 78 octets
Cette fonction renvoie une valeur positive (en fait
n
) pour véridique et renvoie une erreur en tant que réponse falsey (valide selon ce commentaire )Explication:
la source
k
. PS: la coloration syntaxique Matlab fonctionne enfin !!!n
!Pyth, 8 octets
Suite de tests.
la source
splat
dire?Q
à la fin.Haskell, 69 octets
Exemple d'utilisation:
6 # [3,4,7,9,12,16,18]
->True
.Implémentation directe de la définition: faites une liste des sommes de toutes les sous-séquences de longueur n et vérifiez si elle est égale aux doublons supprimés.
la source
JavaScript (ES6), 132 octets
Construit les listes d'additifs de 1 à n, puis vérifie l'unicité de la dernière.
la source
Brachylog , 20 octets
Attend une liste contenant la liste, puis l'entier comme entrée et aucune sortie, par exemple
run_from_atom(':{[L:I]hs.lI}f:+aLdL', [[1:2:3:5]:2]).
.Explication
Prédicat principal
Prédicat 1: rechercher tous les sous-ensembles ordonnés de longueur fixe d'une liste
la source
Julia,
4641 octetsEssayez-le en ligne!
Comment ça fonctionne
Ceci (re) définit l'opérateur binaire
\
pour les arguments Array / Int.combinations(x,n)
renvoie tous les tableaux d'exactement n éléments différents de x . Nous cartographionssum
ces tableaux et stockons le résultat dans t .t∪t
effectue l'union d'ensemble du tableau t avec lui-même, ce qui fonctionne comme le plus longunique
dans ce cas.Enfin, nous comparons t avec le t dédupliqué , en retournant
true
si et seulement si toutes les sommes sont différentes.la source
Python, 89 octets
Testez-le sur Ideone .
Comment ça fonctionne
c(s,n)
liste toutes les n -combinaisons de s , c'est-à-dire toutes les listes de n éléments différents de s . Nous cartographionssum
les listes résultantes, calculant ainsi toutes les sommes possibles de sous-listes de longueur n .Après les quartiers, nous utilisons
c(...,2)
pour créer toutes les paires des sommes résultantes. Si deux sommes x et y sont égales,x^y
renvoie 0 etall
renvoie False . Inversement, si toutes les sommes sont uniques, ellesx^y
seront toujours véridiques etany
reviendront Vrai .la source
J, 34 octets
Approche simple, ne nécessite que le
stats
module complémentaire pour lacomb
fonction. Renvoie0
pour faux et1
pour vrai.Comme alternative à l'utilisation de la fonction
comb
intégrée, il existe une solution de 38 octets qui génère l'ensemble d'alimentation et choisit les sous-ensembles de taille n .Usage
la source
stats
module. Très agréable!Rubis , 50 octets
Essayez-le en ligne!
Si tous les éléments sont uniques,
uniq!
retournenil
. Nier ce résultat, comme dans!(...).uniq!
fait un bon test d'unicité.Cette question a été publiée quelques semaines avant Ruby 2.4.0-preview1, qui a introduit
Enumerable#sum
, ce qui permettrait d'économiser 9 octets ici.41 octets (Ruby 2.4+)
Essayez-le en ligne!
la source
R , 41 octets
Additionne tous les sous-ensembles de n longueurs de s et vérifie si toutes les valeurs dans une table de contingence de ces sommes sont 1 (toutes les sommes sont uniques).
Essayez-le en ligne!
la source