Eine Menge ist summenfrei, wenn keine zwei (nicht notwendigerweise unterschiedlichen) Elemente, wenn sie zusammenaddiert werden, Teil der Menge selbst sind.
Ist zum Beispiel {1, 5, 7}
summenfrei, weil alle Mitglieder ungerade sind und zwei ungerade Zahlen, wenn sie addiert werden, immer gerade sind. Auf der anderen Seite {2, 4, 9, 13}
ist nicht summenfrei, wie entweder 2 + 2 = 4
oder 4 + 9 = 13
zusammen zu einem Mitglied der Menge.
Schreiben Sie ein Programm oder eine Funktion, die eine Menge als Eingabe akzeptiert und einen Wahrheitswert ausgibt, wenn die Menge keine Summe enthält, und andernfalls Falsy.
Beispiele:
Sum-free:
{}
{4}
{1, 5, 7}
{16, 1, 4, 9}
Not sum-free:
{0}
{1, 4, 5, 7}
{3, 0}
{16, 1, 4, 8}
Antworten:
Pyth -
85 BytesVielen Dank an @FryAmTheEggman für das Speichern von 3 Bytes.
Test Suite .
quelle
2 + 2 = 4
von OP. Meine Antwort vor dem Golfspiel von.C
FryAmTheEggman verwendete aus diesem Grund tatsächlich Kombinationen mit Ersatz .Python 2, 41 Bytes
s
sollte ein Python-Set sein.Lustige Tatsache:
sum-free
ist ein Anagramm meines Namens.quelle
lambda s:not{a+b for a in s for b in s}&s
ist die gleiche Länge. Ich kann leider keinen Weg finden, die Verneinung zu verkürzen.Gelee , 5 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript,
864241 BytesDanke Cᴏɴᴏʀ O'Bʀɪᴇɴ, dass du mir eine Menge Bytes in Klammern / geschweiften Klammern gespart hast. Vielen Dank auch an Neil, der darauf hingewiesen hat, dass die Funktion den entgegengesetzten Booleschen Wert zurückgibt, als sie haben sollte.
Ich habe versucht, Bytes durch Neudefinition zu reduzieren,
n.some
aber das funktioniert nicht, da es sich leider um eine Prototypfunktion handelt. Es gibt vielleicht eine bessere Lösung mitArray.prototype.map
in JS, aber die eine oder andere Funktion macht wirklich Spaß.Ich frage mich jetzt, ob es einen kürzeren Weg gibt, als
.includes
etwas wie .indexOf zu verwenden und 1 hinzuzufügen (was einen wahrheitsgemäßen Wert ergeben würde, wenn es die Zahl enthält).Testen:
quelle
n=>n.some(m=>n.some(o=>n.some(p=>m+o==p)))
n.contains(o+p)
die Option , mit der Sie 2 Bytes über das Innerste sparensome
.includes
(es sollte ursprünglich aufgerufen werden,contains
aber einige Bibliotheken haben eine widersprüchliche Definition).MATL, 5 Bytes
Dies gibt ein Array aus, das wahr ist, wenn alle Einträge
1
falsch sind. Hier ist eine Demo, um verschiedene Wahrheits- / Falschheitswerte in MATL zu zeigen .Probieren Sie es online
Erläuterung
quelle
Mathematica, 23 Bytes
quelle
∩
mit⋂
(U-22c2). Der Code kann derzeit nicht in Mathematica kopiert werden.Haskell,
32, 30 BytesEinfache Lösung:
Zwei von @Lynn gespeicherte Bytes
quelle
f x=and[a+b/=c|a<-x,b<-x,c<-x]
für 30 Bytes.Julia, 18 Bytes
Probieren Sie es online!
quelle
J,
18108 BytesDank Meilen 8 Bytes gespart und dank FrownyFrog 2!
Entspricht der ursprünglichen Liste der eingestellten Differenz tabellarischer Summen. Dies ist äquivalent zu:
zur Eingabe
y
. Dies bedeutet:+/~
gibt eine Summentabelle mit zurücky
. Denny =: 16 1 4 9
dies gibt:Dann verwenden wir
-.
, was eine Liste erzeugt, die aus allen Elementen besteht, diey
nicht in dieser Tabelle enthalten sind. Wenn die Liste summenfrei ist, wird dieselbe Liste erstellt. Dann-:
prüft auf Gleichheit von Listen, die die gewünschte Ausgabe erzeugt.Alt, 18 Bytes
+/~
Erstellt eine Tabelle mit den Werten der Gruppe, die zu sich selbst hinzugefügt wurden, unde.
prüft, ob sich diese Mitglieder in der ursprünglichen Gruppe befinden. Der Rest davon negiert das maximale Element.quelle
-:]-.&,+/~
für 10 Bytes mit eingestellter Differenz-.
und Listenübereinstimmung-:
-.
bereits mit Zellen von y.Retina ,
4544 BytesDie Eingabe ist eine dezimale Liste von durch Kommas getrennten Zahlen. Die Ausgabe ist
0
(falsch) oder1
(wahr).Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
Erläuterung
Stufe 1: Substitution
Dadurch werden alle Elemente der Eingabe in Unary konvertiert und eingeschlossen
<...>
. Der Zweck der spitzen Klammern besteht darin, eine Liste, die nur0
eine leere Liste enthält, zu unterscheiden (da die unäre Darstellung von0
selbst leer ist).Stufe 2: Substitution
Wir wiederholen die Zeichenfolge dreimal, indem wir sie am Ende zweimal anhängen.
Stufe 3: Spiel
Wir versuchen nun, drei Zahlen im Ergebnis so zu finden, dass die ersten beiden zur dritten addieren. Diese Übereinstimmungen werden gezählt (dies zählt eigentlich nicht alle derartigen Tupel, da Übereinstimmungen nicht überlappen können, aber wenn ein solches Tupel existiert, wird es gefunden). Daher bekommen wir
0
für summenfreie Mengen und sonst etwas Positives.Stufe 4: Match
Da die vorherige Stufe das Gegenteil von dem ergab, was wir wollen, negieren wir das Ergebnis, indem wir die Übereinstimmungen zählen,
^0
die1
für die Eingabe0
und0
für alles andere gelten.quelle
Oktave,
292125 BytesVielen Dank an Suever ! Es wird ein Array zurückgegeben. Ich habe
0
am Ende hinzugefügt ,[]
um summenfrei zu machen . So überprüfen Sie die Richtigkeit und Falschheit in Octave:Eine Alternative, die 0 oder 1 zurückgibt, ist:
quelle
@(s)~ismember(s+s',s)
da Arrays wahr / falsch sein könnenClojure,
4737 Bytesganz einfache Lösung. verwendet das Listenverständnis, um alle Elemente zu finden, deren Summe einem anderen Element entspricht.
Variante mit 38 Bytes:
quelle
#(=(for[a % b % :when(%(+ a b))]a)[])
der 10 Bytes gespart werden könnenPerl 6 ,
24 21 2019 BytesDie Eingabe ist ein beliebiger Positionswert wie eine Liste .
(ein Set ist ein Assoziativer, also müsstest du ihn aufrufen
.keys
.)Prüfung:
quelle
Mathematica
63 6242 BytesDiese kürzere Version profitierte von der Einreichung von A Simmons. Es muss kein Element aus der Liste entfernt werden, bevor
IntegerPartitions
es angewendet wird.Wenn ein Element nicht in zwei ganze Zahlen (jeweils aus der Liste) unterteilt werden kann,
IntegerPartitions[#,{2},#]=={}
gilt.And
prüft, ob dies für jedes Element in der Liste gilt. In diesem Fall ist die Liste ohne Summen.Beispiele
Falsch
Wahr
Es gibt eine 2, aber keine ungeraden Zahlen, die sich um 2 unterscheiden.
Wahr
quelle
a
irgendwo anders in Ihrer Arbeitsmappe definiert? Diese Ausdrücke geben nicht die gewünschte Ausgabe, wenn ich sie auswerte.a
hätte eine sein sollen#
. Ich habe es korrigiert und ein überflüssiges entfernt@
.Ruby, 36 Bytes
Konstruiert ein kartesisches Produkt der Menge gegen sich selbst, ermittelt die Summe aller Elemente und prüft dann, ob eine Überschneidung mit der ursprünglichen Menge vorliegt. Die Eingabe ist ein Array, aber in Ruby gibt es genügend festgelegte Operationen, damit es trotzdem gut funktioniert.
-1 Byte über meiner ursprünglichen Lösung (
&
anstelle von-
und verglichen mit[]
) aufgrund der Inspiration von @feersumProbieren Sie es hier aus!
quelle
Python, 40 Bytes
^
= symmetrischer Unterschied, neue Menge mit Elementen in beiden Mengen, aber nicht in beiden>
True, wenn die linke Menge eine Obermenge der rechten Menge ist.quelle
A is sum-free if the equation a + b = c has no solution with a, b, c ∈ A
. Mit dieser Definition ist die leere Menge nicht summenfrei und meine Antwort ist richtig. Aber ich bin vielleicht voreingenommen.Brachylog , 13 Bytes
Erläuterung
quelle
[2:2]
eine Teilmenge von 2 Elementen von[2:4:9]
?[2:4:9]
.R,
3936 BytesAufruf als
w(s)
, wos
ist die Menge (eigentlich Vektor) von Werten. Hier ist die Ausgabe für einige Testfälle:Woher
c()
ist die Verkettungsfunktion, die eine Reihe von Werten annimmt und daraus einen Vektor macht?BEARBEITEN: Dank @MickyT wird es zu einer anonymen Funktion, 3 Bytes zu speichern.
quelle
function(s)!any(outer(s,s,'+')%in%s)
Schläger, 58 Bytes
Erläuterung:
quelle
05AB1E ,
95 Bytes4 Bytes dank Magic Octopus Urn gespart
Probieren Sie es online!
Erläuterung
quelle
APL, 8 Bytes
Erläuterung:
Prüfung:
quelle
Haskell, 30 Bytes
Ich denke, es gibt eine kürzere Lösung, die interessanter ist, aber ich habe sie nicht gefunden.
Dies sind 33 und 34 Bytes:
quelle
s
und den letzten Teil des Verständnisses loszuwerden?f s=and[notElem(x+y)s|x<-s,y<-s]
, das ist 32. Es gibt auchf s=all(`notElem`s)$(+)<$>s<*>s
für 31.Eigentlich 7 Bytes
Probieren Sie es online!
quelle
♂
)TSQL, 47 Bytes
Hinweis: Dies wird nur einmal ausgeführt. Dann muss die Tabelle gelöscht oder gelöscht werden, um erneut ausgeführt zu werden. Der Geigeneditor erlaubt keine Erstellung von Tabellen. Aus diesem Grund verwendet die in meiner Antwort enthaltene Geige 2 zusätzliche Bytes, um dies zu kompensieren - die Geigenversion erfordert keine Bereinigung.
Geige
quelle
Perl, 46 Bytes
45-Byte-Code + 1-Byte-Befehlszeile (-p)
Verwendet eine einzelne Regex-Übereinstimmung mit Perls Unterstützung für 'Code-Ausdrücke' innerhalb der Regex, um eine Auswertung innerhalb einer Übereinstimmung zu ermöglichen.
Um die Anforderung zu umgehen, dass die Eingabe unsortiert ist, wiederholen wir die Eingabezeichenfolge dreimal. Dies stellt sicher, dass das Ergebnis nach den beiden Operanden liegt, und ermöglicht die erneute Übereinstimmung derselben Ziffer (z. B. bei der Eingabe)
2 4
).Anwendungsbeispiel:
quelle
Faktor 47 Bytes
∩ { } =
entspricht aber kürzer alsintersects?
.Σ
ist kürzer als aber äquivalent zusum
.Danke, math.unicode !
Testcode:
Ich bin nur zuversichtlich, dass die ersten beiden richtig sind. Aus der Frage, was der Rest sein soll, ist nicht klar, daher denke ich, dass es für den Moment in Ordnung ist.
quelle
PHP, 73 Bytes
+8, um das Snippet in ein Programm zu verwandeln, -8 bei veralteten Variablen dank insertusernamehere
druckt
1
fürtrue
, leere Ausgabe zurfalse
Verwendung:
php <filename> <value1> <value2> ...
qualifizierte Funktion zum Testen (
9486): Gibt zurück1
oder nichtsTests
quelle
$i
und$j
Sie können 8 Bytes verwerfen$i=>
sowie$j=>
speichern . Leider sind Code-Schnipsel keine gültigen Antworten. Machen Sie es zu einer Funktion oder einem vollständigen Programm und nehmen Sie dies in Ihre Byteanzahl auf, und Sie können loslegen. :)Java, 67 Bytes
Input ist a
Set<Integer>
. Tests:Ausgabe:
quelle
Clojure, 34 Bytes
Ich schrieb dies, bevor ich die frühere Clojure-Lösung bemerkte. Auf jeden Fall ist dieser kompakter, da er den Eingangssatz als
pred
Funktion für verwendetnot-any?
.quelle
Prolog (SWI) ,
665649 BytesProbieren Sie es online!
quelle