Zestaw nie zawiera sum, jeśli żadne dwa (niekoniecznie odrębne) elementy po dodaniu są częścią samego zestawu.
Na przykład {1, 5, 7}
jest bez sumy, ponieważ wszystkie elementy są nieparzyste, a dwie nieparzyste liczby po dodaniu są zawsze parzyste. Z drugiej strony, {2, 4, 9, 13}
nie jest to suma wolna, jak albo 2 + 2 = 4
czy 4 + 9 = 13
dodać razem z elementem zestawu.
Napisz program lub funkcję, która pobiera zestaw jako dane wejściowe i wyprowadza wartość Prawda, jeśli zestaw nie zawiera sum, a Falsy w przeciwnym razie.
Przykłady:
Sum-free:
{}
{4}
{1, 5, 7}
{16, 1, 4, 9}
Not sum-free:
{0}
{1, 4, 5, 7}
{3, 0}
{16, 1, 4, 8}
Odpowiedzi:
Pyth -
85 bajtówDzięki @FryAmTheEggman za uratowanie mi 3 bajtów.
Pakiet testowy .
źródło
2 + 2 = 4
z OP. Moja odpowiedź przed FryAmTheEggman w golfa faktycznie używała.C
ombination z wymianą z tego powodu.Python 2, 41 bajtów
s
powinien być zestawem Python.Ciekawostka:
sum-free
to anagram mojego imienia.źródło
lambda s:not{a+b for a in s for b in s}&s
jest tej samej długości. Niestety nie mogę znaleźć sposobu na skrócenie negacji.Galaretka , 5 bajtów
Wypróbuj online!
Jak to działa
źródło
JavaScript,
864241 bajtówDzięki Cᴏɴᴏʀ O'Bʀɪᴇɴ za uratowanie mi mnóstwa bajtów w nawiasach / nawiasach klamrowych. Dziękuję także Neilowi za zwrócenie uwagi, że funkcja zwraca przeciwną wartość logiczną niż powinna.
Próbowałem zmniejszyć liczbę bajtów, zmieniając definicję,
n.some
ale to nie działa, ponieważ niestety jest to funkcja prototypowa. WArray.prototype.map
JS może być lepsze rozwiązanie, ale niektóre funkcje są naprawdę fajne.Zastanawiam się teraz, czy istnieje krótszy sposób niż
.includes
użycie czegoś takiego jak .indexOf i dodanie 1 (co dałoby prawdziwą wartość, gdyby zawierała liczbę).Testowanie:
źródło
n=>n.some(m=>n.some(o=>n.some(p=>m+o==p)))
n.contains(o+p)
co oszczędza 2 bajty w głębisome
.includes
(pierwotnie miał być wywołany,contains
ale niektóre biblioteki mają sprzeczną definicję).MATL, 5 bajtów
Daje to tablicę, która jest prawdziwa, jeśli wszystkie wpisy są,
1
i nie działa inaczej. Oto demo pokazujące różne wartości true / falsey w MATL .Wypróbuj online
Wyjaśnienie
źródło
Mathematica, 23 bajty
źródło
∩
z⋂
(U-22C2). Obecnie kodu nie można skopiować do Mathematica.Haskell,
32, 30 bajtówProste rozwiązanie:
Dwa bajty zapisane przez @Lynn
źródło
f x=and[a+b/=c|a<-x,b<-x,c<-x]
przez 30 bajtów.Julia, 18 bajtów
Wypróbuj online!
źródło
J,
18108 bajtów8 bajtów zaoszczędzonych dzięki milom, a 2 dzięki FrownyFrog!
Dopasowuje oryginalną listę z ustawioną różnicą sum tabelarycznych. Jest to równoważne z:
na wejście
y
. Przekłada się to na:+/~
zwraca tabelę sum za pomocąy
. Doy =: 16 1 4 9
tego otrzymujemy:Następnie używamy
-.
, który tworzy listę składającą się ze wszystkich elementów, którychy
nie ma w tej tabeli. Jeśli lista nie zawiera sum, spowoduje to utworzenie tej samej listy. Następnie-:
sprawdza równość list, co daje pożądany wynik.Stary, 18 bajtów
+/~
tworzy tabelę wartości zestawu dodanego do siebie ie.
sprawdza, czy te elementy są w oryginalnym zestawie. Reszta neguje maksymalny element.źródło
-:]-.&,+/~
dla 10 bajtów przy użyciu ustawionej różnicy-.
i dopasowania listy-:
-.
już działa z komórkami y.Siatkówka ,
4544 bajtówDane wejściowe to dziesiętna lista liczb oddzielonych przecinkami. Dane wyjściowe to
0
(fałsz) lub1
(prawda).Wypróbuj online! (Pierwszy wiersz włącza pakiet testowy oddzielony od linii).
Wyjaśnienie
Etap 1: Zmiana
Konwertuje wszystkie elementy danych wejściowych na jednoargumentowe i otacza je
<...>
. Celem nawiasów kątowych jest rozróżnienie listy zawierającej tylko0
pustą listę (ponieważ sama reprezentacja jedności0
jest pusta).Etap 2: Zmiana
Powtarzamy ciąg 3 razy, dodając go dwa razy na końcu.
Etap 3: Mecz
Teraz staramy się znaleźć w wyniku trzy liczby, tak aby dwie pierwsze sumowały się do trzeciej. Te dopasowania są liczone (to tak naprawdę nie liczy wszystkich takich krotek, ponieważ dopasowania nie mogą się pokrywać, ale jeśli taka krotka istnieje, zostanie znaleziona). W związku z tym otrzymujemy
0
zestawy bez sumy, a w przeciwnym razie coś pozytywnego.Etap 4: Mecz
Ponieważ poprzedni etap dawał odwrotność tego, czego chcemy, negujemy wynik, licząc dopasowania,
^0
które są1
przeznaczone do wprowadzania0
i0
do wszystkiego innego.źródło
Oktawa,
292125 bajtówDzięki Suever ! Zwraca tablicę. Dodałem
0
na końcu, aby[]
stać się bez sumy. Aby sprawdzić prawdę i falsey w Octave, możesz to zrobić:Alternatywą, która zwraca 0 lub 1, jest:
źródło
@(s)~ismember(s+s',s)
ponieważ tablice mogą być prawdziwe / falseyClojure,
4737 bajtówcałkiem proste rozwiązanie. używa rozumienia listy, aby znaleźć wszystkie elementy, których suma jest równa innemu elementowi.
Wariant 38 bajtów:
źródło
#(=(for[a % b % :when(%(+ a b))]a)[])
którym można zapisać 10 bajtówPerl 6 ,
24 21 2019 bajtówDane wejściowe to dowolna wartość pozycyjna, taka jak lista .
( zestaw jest asocjatorem, więc musisz go przywołać
.keys
).Test:
źródło
Mathematica
63 6242 bajtyTa krótsza wersja skorzystała z przesłania A Simmonsa. Przed
IntegerPartitions
zastosowaniem żaden element nie musi zostać usunięty z listy .Jeśli element nie może być podzielony na dwie liczby całkowite (każdy z listy), wówczas pozostaje
IntegerPartitions[#,{2},#]=={}
.And
sprawdza, czy dotyczy to każdego elementu na liście. Jeśli tak, lista nie zawiera sum.Przykłady
Fałszywe
Prawdziwe
Istnieją 2, ale nie ma liczb nieparzystych, które różnią się o 2.
Prawdziwe
źródło
a
zdefiniowałeś coś innego w swoim skoroszycie? Te wyrażenia nie dają pożądanego wyniku, gdy je oceniam.a
powinno być#
. Poprawiłem to i usunąłem zbędne@
.Rubinowy, 36 bajtów
Konstruuje iloczyn kartezjański zbioru względem siebie i znajduje sumę wszystkich elementów, a następnie sprawdza, czy nie ma przecięcia z oryginalnym zestawem. Dane wejściowe są tablicami, ale w Rubim mają wystarczająco dużo ustawionych operacji, aby i tak dobrze działały.
-1 bajt nad moim oryginalnym rozwiązaniem (zastosowanym
&
zamiast-
i porównanym z[]
) z powodu inspiracji z @feersumWypróbuj tutaj!
źródło
Python, 40 bajtów
^
= różnica symetryczna, nowy zestaw z elementami w obu zestawach, ale nie w obu>
Prawda, jeśli lewy zestaw jest nadzbiorem prawego zestawu.źródło
A is sum-free if the equation a + b = c has no solution with a, b, c ∈ A
. Przy tej definicji pusty zestaw nie jest całkowicie darmowy, a moja odpowiedź jest poprawna. Ale mogę być stronniczy.Brachylog , 13 bajtów
Wyjaśnienie
źródło
[2:2]
podzbiór 2 elementów[2:4:9]
?[2:4:9]
.R,
3936 bajtówWywołaj jako
w(s)
, gdzies
jest zestaw (faktycznie wektor) wartości. Oto wynik niektórych przypadków testowych:Gdzie
c()
jest funkcja konkatenacji, która bierze wiązkę wartości i czyni ją wektorem.EDYCJA: Dzięki temu @MickyT jest anonimową funkcją do zapisywania 3 bajtów.
źródło
function(s)!any(outer(s,s,'+')%in%s)
Rakieta, 58 bajtów
Wyjaśnienie:
źródło
05AB1E ,
95 bajtówOszczędność 4 bajtów dzięki Magic Octopus Urn
Wypróbuj online!
Wyjaśnienie
źródło
APL, 8 bajtów
Wyjaśnienie:
Test:
źródło
Haskell, 30 bajtów
Myślę, że istnieje krótsze rozwiązanie, które jest bardziej interesujące, ale go nie znalazłem.
Są to 33 i 34 bajty:
źródło
s
i pozbywanie się ostatniej części komprencji działa?f s=and[notElem(x+y)s|x<-s,y<-s]
, to 32. Jest teżf s=all(`notElem`s)$(+)<$>s<*>s
za 31.Właściwie 7 bajtów
Wypróbuj online!
źródło
♂
)TSQL, 47 bajtów
Uwaga: To uruchomi się tylko raz, a następnie tabela musi zostać usunięta lub upuszczona, aby uruchomić ponownie. Edytor skrzypiec nie pozwala na tworzenie tabel. Dlatego skrzypce zawarte w mojej odpowiedzi wykorzystują 2 dodatkowe bajty, aby to zrekompensować - wersja skrzypek nie wymaga czyszczenia.
Skrzypce
źródło
Perl, 46 bajtów
45-bajtowy kod + 1-bajtowy wiersz poleceń (-p)
Używa pojedynczego dopasowania wyrażenia regularnego z obsługą Perla dla „wyrażeń kodu” w wyrażeniu regularnym, aby umożliwić ocenę w dopasowaniu.
Aby obejść wymaganie, że dane wejściowe są nieposortowane, powtarzamy łańcuch wejściowy trzy razy. Gwarantuje to, że wynik występuje po dwóch operandach i pozwala na ponowne dopasowanie tej samej cyfry (np. W przypadku wprowadzania
2 4
).Przykład użycia:
źródło
Współczynnik, 47 bajtów
∩ { } =
jest równoważne, ale krótszy niżintersects?
.Σ
jest krótszy niż, ale równoważnysum
.Dzięki, math.unicode !
kod testowy:
Jestem tylko pewien, że pierwsze dwa są poprawne. Pytanie, jaka powinna być reszta, nie jest jasne, więc myślę, że na razie jest w porządku.
źródło
PHP, 73 bajty
+8, aby zmienić fragment kodu w program, -8 w przypadku przestarzałych zmiennych dzięki wstawcesernameherehere
drukuje
1
dlatrue
, pusty wydruk dofalse
użycia:
php <filename> <value1> <value2> ...
kwalifikowana funkcja do testowania (
9486): zwraca1
lub nictesty
źródło
$i
i$j
możesz odrzucić,$i=>
a także$j=>
zapisać 8 bajtów . Niestety, fragmenty kodu nie są prawidłowymi odpowiedziami. Ustaw funkcję lub pełny program i uwzględnij ją w swojej liczbie bajtów i jesteś gotowy do pracy. :)Java, 67 bajtów
Dane wejściowe to
Set<Integer>
. Testy:Wydajność:
źródło
Clojure, 34 bajty
Napisałem to, zanim zauważyłem wcześniejsze rozwiązanie Clojure. W każdym razie ten jest bardziej kompaktowy, ponieważ wykorzystuje zestaw danych wejściowych jako
pred
funkcjęnot-any?
.źródło
Prolog (SWI) ,
665649 bajtówWypróbuj online!
źródło