Un ensemble est sans somme s'il n'y a pas deux éléments (pas nécessairement distincts) lorsqu'ils sont ajoutés ensemble font partie de l'ensemble lui-même.
Par exemple, {1, 5, 7}
est sans somme, car tous les membres sont impairs, et deux nombres impairs lorsqu'ils sont additionnés sont toujours pairs. En revanche, {2, 4, 9, 13}
n'est pas sans somme, que ce soit 2 + 2 = 4
ou 4 + 9 = 13
additionner à un membre de l'ensemble.
Écrivez un programme ou une fonction qui prend un ensemble en entrée et génère une valeur Truthy si l'ensemble est sans somme, et Falsy sinon.
Exemples:
Sum-free:
{}
{4}
{1, 5, 7}
{16, 1, 4, 9}
Not sum-free:
{0}
{1, 4, 5, 7}
{3, 0}
{16, 1, 4, 8}
Réponses:
Pyth -
85 octetsMerci à @FryAmTheEggman de m'avoir sauvé 3 octets.
Suite de test .
la source
2 + 2 = 4
depuis OP. Ma réponse avant le golf de FryAmTheEggman a en fait utilisé des.C
combinaisons avec remplacement à cause de cela.Python 2, 41 octets
s
devrait être un ensemble Python.Fait amusant:
sum-free
est une anagramme de mon nom.la source
lambda s:not{a+b for a in s for b in s}&s
est de la même longueur. Je ne trouve malheureusement pas de moyen de raccourcir la négation.Gelée , 5 octets
Essayez-le en ligne!
Comment ça marche
la source
JavaScript,
864241 octetsMerci Cᴏɴᴏʀ O'Bʀɪᴇɴ de m'avoir sauvé une tonne d'octets entre parenthèses / accolades. Merci également à Neil d'avoir souligné que la fonction renvoyait la valeur booléenne opposée à ce qu'elle aurait dû.
J'ai essayé de réduire les octets en redéfinissant
n.some
mais cela ne fonctionne pas car c'est malheureusement une fonction prototype. Il pourrait y avoir une meilleure solution avecArray.prototype.map
JS, mais la fonction some est vraiment amusante.Je me demande maintenant s'il existe un moyen plus court que d'
.includes
utiliser quelque chose comme .indexOf et d'ajouter 1 (ce qui lui donnerait une valeur vraie s'il contient le nombre).Essai:
la source
n=>n.some(m=>n.some(o=>n.some(p=>m+o==p)))
n.contains(o+p)
ce qui vous permet d'économiser 2 octets sur l'intérieursome
.includes
(il allait à l'origine être appelécontains
mais certaines bibliothèques ont une définition conflictuelle).MATL, 5 octets
Cela génère un tableau qui est véridique si toutes les entrées le sont
1
et Falsey sinon. Voici une démo pour montrer diverses valeurs de vérité / falsey dans MATL .Essayez-le en ligne
Explication
la source
Mathematica, 23 octets
la source
∩
par⋂
(U-22C2). À l'heure actuelle, le code n'est pas copypastable dans Mathematica.Haskell,
32, 30 octetsSolution simple:
Deux octets enregistrés par @Lynn
la source
f x=and[a+b/=c|a<-x,b<-x,c<-x]
pour 30 octets.Julia, 18 octets
Essayez-le en ligne!
la source
J,
18108 octets8 octets économisés grâce aux miles, et 2 grâce à FrownyFrog!
Correspond à la liste d'origine avec la différence définie des sommes tabulées. Cela équivaut à:
pour entrée
y
. Cela se traduit par:+/~
renvoie une table de sommes en utilisanty
. Cary =: 16 1 4 9
cela donne:Ensuite, nous utilisons
-.
, qui produit une liste composée de tous les élémentsy
ne figurant pas dans ce tableau. Si la liste est sans somme, cela produira la même liste. Ensuite,-:
vérifie l'égalité des listes, ce qui produit la sortie souhaitée.Ancien, 18 octets
+/~
crée un tableau des valeurs de l'ensemble ajouté à lui-même ete.
vérifie si ces membres se trouvent dans l'ensemble d'origine. Le reste de cela annule l'élément maximal.la source
-:]-.&,+/~
pour 10 octets en utilisant la différence d'ensemble-.
et la correspondance de liste-:
-.
fonctionne déjà avec les cellules de y.Rétine ,
4544 octetsL'entrée est une liste décimale de nombres séparés par des virgules. La sortie est
0
(fausse) ou1
(véridique).Essayez-le en ligne! (La première ligne active une suite de tests séparée par saut de ligne.)
Explication
Étape 1: substitution
Cela convertit tous les éléments de l'entrée en unaire et les encapsule
<...>
. Le but des crochets angulaires est de distinguer une liste ne contenant que0
d'une liste vide (puisque la représentation unaire de0
est elle-même vide).Étape 2: substitution
Nous répétons la chaîne 3 fois en l'ajoutant deux fois à la fin.
Étape 3: Match
Nous essayons maintenant de trouver trois nombres dans le résultat de sorte que les deux premiers s'additionnent au troisième. Ces correspondances sont comptées (cela ne compte pas réellement tous ces tuples, car les correspondances ne peuvent pas se chevaucher, mais si un tel tuple existe, il sera trouvé). Par conséquent, nous obtenons
0
des ensembles sans somme et quelque chose de positif autrement.Étape 4: Match
Depuis l'étape précédente a donné à l'opposé de ce que nous voulons, nous nions le résultat en comptant les matches de ce
^0
qui est1
pour l' entrée0
et0
pour tout le reste.la source
Octave,
292125 octetsMerci à Suever ! Il renvoie un tableau. J'ai ajouté
0
à la fin pour faire[]
devenir sans somme. Pour vérifier véridique et falsey dans Octave, vous pouvez le faire:Une alternative qui renvoie 0 ou 1 est:
la source
@(s)~ismember(s+s',s)
car les tableaux peuvent être véridiques / falseyClojure,
4737 octetssolution assez simple. utilise la compréhension de liste pour trouver tous les éléments dont la somme est égale à un autre élément.
Variante de 38 octets:
la source
#(=(for[a % b % :when(%(+ a b))]a)[])
ce qui peut économiser 10 octetsPerl 6 ,
24 21 2019 octetsL'entrée est une valeur positionnelle comme une liste .
(un ensemble est un associatif , vous devrez donc faire appel
.keys
à lui.)Tester:
la source
Mathematica
63 6242 octetsCette version plus courte a bénéficié de la soumission de A Simmons. Aucun élément ne doit être supprimé de la liste avant d'
IntegerPartitions
être appliqué.Si un élément ne peut pas être partitionné en deux entiers (chacun de la liste), alors il en
IntegerPartitions[#,{2},#]=={}
est ainsi.And
vérifie si cela vaut pour chaque élément de la liste. Si c'est le cas, la liste est sans somme.Exemples
Faux
Vrai
Il y a un 2, mais pas de nombres impairs qui diffèrent par 2.
Vrai
la source
a
défini ailleurs dans votre classeur? Ces expressions ne donnent pas la sortie souhaitée lorsque je les évalue.a
aurait dû être un#
. Je l'ai corrigé et supprimé un superflu@
.Rubis, 36 octets
Construit un produit cartésien de l'ensemble par rapport à lui-même et trouve la somme de tous les éléments, puis vérifie l'intersection avec l'ensemble d'origine. L'entrée est des tableaux, mais dans Ruby, ils ont suffisamment d'opérations définies pour que cela fonctionne de toute façon.
-1 octet sur ma solution d'origine (utilisée à la
&
place de-
et comparée à[]
) en raison de l'inspiration de @feersumEssayez-le ici!
la source
Python, 40 octets
^
= différence symétrique, nouvel ensemble avec des éléments dans les deux ensembles mais pas les deux>
Vrai si l'ensemble gauche est un surensemble de l'ensemble droit.la source
A is sum-free if the equation a + b = c has no solution with a, b, c ∈ A
. Avec cette définition, l'ensemble vide n'est pas sans somme, et ma réponse est correcte. Mais je peux être partial.Brachylog , 13 octets
Explication
la source
[2:2]
un sous-ensemble de 2 éléments de[2:4:9]
?[2:4:9]
.R,
3936 octetsAppelez comme
w(s)
, oùs
est l'ensemble (en fait le vecteur) de valeurs. Voici la sortie de certains cas de test:Où
c()
est la fonction de concaténation qui prend un tas de valeurs et en fait un vecteur.EDIT: en faire une fonction anonyme pour économiser 3 octets, grâce à @MickyT.
la source
function(s)!any(outer(s,s,'+')%in%s)
Raquette, 58 octets
Explication:
la source
05AB1E ,
95 octets4 octets enregistrés grâce à l' urne Magic Octopus
Essayez-le en ligne!
Explication
la source
APL, 8 octets
Explication:
Tester:
la source
Haskell, 30 octets
Je pense qu'il existe une solution plus courte qui est plus intéressante, mais je ne l'ai pas trouvée.
Ce sont 33 et 34 octets:
la source
s
et se débarrasser de la dernière partie du travail de compréhension?f s=and[notElem(x+y)s|x<-s,y<-s]
, c'est 32. Il y en a aussif s=all(`notElem`s)$(+)<$>s<*>s
pour 31.En fait , 7 octets
Essayez-le en ligne!
la source
♂
)TSQL, 47 octets
Remarque: Cela ne s'exécutera qu'une seule fois, puis la table doit être supprimée ou supprimée pour s'exécuter à nouveau. L'éditeur de violon ne permet pas la création de tables. Par conséquent, le violon inclus dans ma réponse utilise 2 octets supplémentaires pour compenser cela - la version violon ne nécessite pas de nettoyage.
Violon
la source
Perl, 46 octets
Code de 45 octets + ligne de commande de 1 octet (-p)
Utilise une seule correspondance d'expression régulière avec la prise en charge par Perl des «expressions de code» à l'intérieur de l'expression régulière pour permettre l'évaluation dans une correspondance.
Pour contourner l'exigence selon laquelle l'entrée n'est pas triée, nous répétons la chaîne d'entrée trois fois. Cela garantit que le résultat est après les deux opérandes et permet de faire correspondre à nouveau le même chiffre (par exemple dans le cas d'une entrée
2 4
).Exemple d'utilisation:
la source
Facteur, 47 octets
∩ { } =
est équivalent à mais plus court queintersects?
.Σ
est plus court que mais équivalent àsum
.Merci, math.unicode !
code de test:
Je suis convaincu que les deux premiers sont corrects. La question de savoir ce que devrait être le reste n'est pas claire, donc je pense que ça va pour l'instant.
la source
PHP, 73 octets
+8 pour transformer l'extrait de code en programme, -8 sur les variables obsolètes grâce à insertusernamehere
imprime
1
pourtrue
, sortie vide pourfalse
utilisation:
php <filename> <value1> <value2> ...
fonction qualifiée pour les tests (
9486): retourne1
ou rientests
la source
$i
et que$j
vous pouvez le supprimer$i=>
ainsi que$j=>
et enregistrer 8 octets . Malheureusement, les extraits de code ne sont pas des réponses valides. Faites-en une fonction ou un programme complet et incluez-le dans votre nombre d'octets et vous êtes prêt à partir. :)Java, 67 octets
L'entrée est a
Set<Integer>
. Tests:Sortie:
la source
Clojure, 34 octets
J'ai écrit cela avant de remarquer la précédente solution Clojure. Quoi qu'il en soit, celui-ci est plus compact car il utilise l'ensemble d'entrée comme
pred
fonction pournot-any?
.la source
Prolog (SWI) ,
665649 octetsEssayez-le en ligne!
la source