Pamiętaj, że zestaw jest nieuporządkowany bez duplikatów.
Definicja N -uniquely dodatkowy zestaw S , którego długość jest K jest ustawione tak, że wszystkie N podzbiorów -długość w S sumy różnych numerów. Innymi słowy, sumy wszystkich podzbiorów N długości S są różne.
Cel Biorąc pod uwagę tablicę / zestaw jako dane wejściowe i liczbę N
dla funkcji lub pełnego programu w dowolnym rozsądnym formacie, znajdź i zwróć lub wyślij prawdziwą lub falsey wartość (błąd dla falsey jest w porządku) oznaczający, czy wejście jest N - wyjątkowo addytywny.
Możesz założyć, że każdy element pojawia się najwyżej raz i że każda liczba mieści się w rodzimym typie danych twojego języka. W razie potrzeby można również założyć, że dane wejściowe są posortowane. Na koniec możesz to założyć 0 < N <= K
.
Przykłady
Rozważmy zestaw S = {1, 2, 3, 5}
i N = 2
. Oto wszystkie sumy wszystkich unikalnych par S
(dla unikalnych są jedyne interesujące dla sum):
1 + 2 = 3
1 + 3 = 4
1 + 5 = 6
2 + 3 = 5
2 + 5 = 7
3 + 5 = 8
Widzimy, że w danych wyjściowych nie ma duplikatów, więc S jest 2-unikatowo addytywny.
Rozważmy teraz zestaw T = {12, 17, 44, 80, 82, 90}
i N = 4
. Oto wszystkie możliwe sumy długości czterech:
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
Wszystkie są wyjątkowe, a zatem T jest 4-wyjątkowo addytywny.
Przypadki testowe
[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
źródło
N <= K
?falsey
?Odpowiedzi:
MATL , 7 bajtów
Wypróbuj online!
Zwraca
true
(wyświetlane jako1
) lubfalse
(wyświetlane jako0
).źródło
Galaretka, 7 bajtów
Wypróbuj online!
Zwraca liczbę dodatnią dla prawdy i zero dla falsey.
źródło
Matlab, 78 bajtów
Ta funkcja zwraca wartość prawdy (w rzeczywistości
n
) dla prawdy i zwraca błąd jako odpowiedź falsey (poprawna zgodnie z tym komentarzem )Wyjaśnienie:
źródło
k
. PS: Podświetlanie składni Matlaba wreszcie działa !!!n
!Pyth, 8 bajtów
Zestaw testowy.
źródło
splat
znaczyQ
na końcu.Haskell, 69 bajtów
Przykład użycia:
6 # [3,4,7,9,12,16,18]
->True
.Bezpośrednia implementacja definicji: zrób listę sum wszystkich podsekwencji o długości n i sprawdź, czy jest ona równa z usuniętymi duplikatami.
źródło
JavaScript (ES6), 132 bajty
Tworzy listy dodatków od 1 do n, a następnie sprawdza ostatnią z nich pod kątem wyjątkowości.
źródło
Brachylog , 20 bajtów
Oczekuje, że lista zawiera listę, a następnie liczbę całkowitą jako dane wejściowe, a nie dane wyjściowe, np
run_from_atom(':{[L:I]hs.lI}f:+aLdL', [[1:2:3:5]:2]).
.Wyjaśnienie
Główny predykat
Predykat 1: Znajdź wszystkie uporządkowane podzbiory o stałej długości listy
źródło
Julia,
4641 bajtówWypróbuj online!
Jak to działa
To (ponownie) definiuje operator binarny
\
dla argumentów Array / Int.combinations(x,n)
zwraca wszystkie tablice dokładnie n różnych elementów x . Mamy mapsum
ponad te tablice i zapisać wynik w t .t∪t
wykonuje zestaw unii tablicy t ze sobą, co działa jak dłużejunique
w tym przypadku .Na koniec porównujemy t z deduplikowanym t , zwracając
true
wtedy i tylko wtedy, gdy wszystkie sumy są różne.źródło
Python, 89 bajtów
Przetestuj na Ideone .
Jak to działa
c(s,n)
wyświetla wszystkie n- kombinacje s , tj. wszystkie listy n różnych elementów s . Mapujemysum
powstałe listy, obliczając w ten sposób wszystkie możliwe sumy podlist o długości n .Po totemach
c(...,2)
tworzymy wszystkie pary sum wynikowych. Jeśli jakieś dwie sumy x i y są równe,x^y
powróci 0 iall
zwróci fałsz . I odwrotnie, jeśli wszystkie kwoty są unikalne,x^y
zawsze będą zgodne z prawdą iany
zwrócą wartość True .źródło
J, 34 bajty
Proste podejście wymaga tylko
stats
dodatku docomb
funkcji. Zwraca0
za false i1
za true.Alternatywą dla użycia
comb
wbudowanego jest rozwiązanie 38-bajtowe , które generuje zestaw mocy i wybiera podzbiory o rozmiarze n .Stosowanie
źródło
stats
module. Bardzo dobrze!Rubinowy , 50 bajtów
Wypróbuj online!
Jeśli wszystkie elementy są unikalne,
uniq!
zwracanil
. Negowanie tego wyniku, podobnie jak w,!(...).uniq!
stanowi niezły test wyjątkowości.To pytanie zostało opublikowane na kilka tygodni przed Ruby 2.4.0-Preview1, które wprowadziło
Enumerable#sum
, co pozwoliłoby zaoszczędzić tutaj 9 bajtów.41 bajtów (Ruby 2.4+)
Wypróbuj online!
źródło
R , 41 bajtów
Sumuje wszystkie podzbiory s długości n i sprawdza, czy wszystkie wartości w tabeli awaryjnej tych sum wynoszą 1 (wszystkie sumy są unikalne).
Wypróbuj online!
źródło