Wyzwanie związane z marketingiem wielopoziomowym.
Rówieśnik chce zostać nagrodzony. Przyciągnął więc N
inwestorów ( N>=1
), każdego i-tego inwestora x[i]
. Gdy suma przekroczy próg, x[0]+x[1]+...+x[N-1] >= T
partner może zostać nagrodzony. Ale tylko wtedy, gdy spełnione są następujące warunki:
- Minimalna liczba inwestorów powinna być większa niż
M
(M<=N
) - Dla co najmniej jednego całkowitą
k
, gdziek>=M
ik<=N
wszelkiek
inwestorów zainwestować przynajmniejT/k
każda;
Dany N, x[], T, M
że powinieneś ustalić, czy nagroda partnera jest generowana, czy nie (wynik boolowski, „tak” lub „nie”). Najkrótszy kod wygrywa.
Przykłady:
N=5; M=3; T=10000
, aby wygenerować nagrodę partnera, należy spełnić jedno z poniższych:
- dowolne 3 zainwestowały co najmniej 3334 każdy
- dowolne 4 zainwestowane co najmniej 2500 każdy
- wszystkie 5 zainwestowało co najmniej 2000
N=6; M=2; T=5000
:
- dowolne 2 zainwestowane co najmniej 2500 każdy
- 3 dowolne zainwestowane co najmniej 1667 każdego
- każde 4 zainwestowało co najmniej 1250 każdego
- każde 5 zainwestowało co najmniej 1000 każdego
- wszystkie 6 zainwestowało co najmniej 834 każdy
uogólnione: dla każdego k
, gdzie k>=M
i k<=N
:
- każdy
k
zN
inwestorów zainwestował przynajmniejT/k
każdy
Przypadki testowe:
format:
N, x[], T, M -> correct answer
6, [999, 999, 59, 0, 0, 0], 180, 3 -> 0
6, [0, 60, 0, 60, 60, 0], 180, 3 -> 1
6, [179, 89, 59, 44, 35, 29], 180, 3 -> 0
6, [179, 89, 59, 44, 35, 30], 180, 3 -> 1
6, [179, 89, 59, 44, 36, 29], 180, 3 -> 1
6, [179, 90, 59, 44, 35, 29], 180, 3 -> 0
6, [30, 30, 30, 30, 29, 30], 180, 3 -> 0
6, [30, 30, 30, 30, 30, 30], 180, 3 -> 1
code-golf
decision-problem
xakepp35
źródło
źródło
len(x)
będzie krótsze niż pisanieN
. Dzieje się tak, ponieważ dla dynamicznie alokowanej tablicyx
w C nie ma bezpośredniejlen(x)
funkcji - dlatego zawsze możesz odnosić się do długości jakoN
. Dla wygody możesz rozważyć wszystkie dane wejścioweN, x[], T, M
jako niektóre zewnętrznie zdefiniowane stałe lub niektóre wbudowane języki.true
i prawdafalse
?Odpowiedzi:
Galaretka ,
129 bajtówPełny program, który akceptuje
x T M
i drukuje,0
jeśli peer zostanie nagrodzony, a1
jeśli nie.Wypróbuj online!
W jaki sposób?
źródło
0
jeśli rówieśnik zostanie nagrodzony, a1
jeśli nie”. (tzn.0
„tak”). Oszczędza 1 bajt :)05AB1E , 9 bajtów
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Port odpowiedzi galaretki @JonathanAllan , więc bierze również wejścia
x T M
i wyjścia0
dla"yes"
i1
dla"no"
. Jeśli nie jest to dozwolone i powinno zostać odwrócone, końcowe_
można dodać .Wyjaśnienie:
Alternatywa dla
.ssè
:Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
JavaScript,
5452 bajtyWypróbuj online
źródło
[0, 60, 0, 60, 60, 0], 180, 3 -> true
wydaje się nie działać! 72 byted bersion radzi sobie dobrze. Błąd czy funkcja?)Siatkówka , 79 bajtów
Wypróbuj online! Pobiera dane wejściowe w formacie
[x], T, M
. Link zawiera przypadki testowe. Wyjaśnienie:Konwertuj na unary.
Sortuj
[x]
w kolejności malejącej.Pomnóż każdy element
[x]
przez jego indeks.Usuń pierwsze
M-1
elementy z[x]
.Sprawdź, czy jakikolwiek pozostały element
[x]
jest większy lub równyT
.źródło
Perl 6 ,
46 3329 bajtówWypróbuj online!
Anonimowe bloki kodu, które przyjmują dane wejściowe w formularzu
list, amount, length of list, minimum amount of investors
i zwracają połączenie prawda-falseyall
, w którym prawda jest nieudana, a falsey jest sukcesem.Wyjaśnienie:
źródło
05AB1E , 6 bajtów
Wejście podjęte w celu
T
,N
,x[]
,M
Wyjście jest
0
na wzajemnej nagrody i1
jeśli nieWypróbuj online! lub jako pakiet testowy
Wyjaśnienie
źródło
*
zakresu do niejawnego przycięcia listy!C # (.NET Core) ,
129, 89 bajtówEDYCJA: Podziękowania dla Kevina Cruijssena za grę w golfa z 40 bajtów i wyjaśnienie mechaniki, dlaczego!
Wypróbuj online!
źródło
n
ponieważ nigdzie ich nie używasz; usunięto,k
ponieważ możesz użyćm
samego siebie; dodano zmiennąl
dlaq.Length
odkąd go używać dwa razy; połączyliśmy zmienne,int c=0,l=q.Length,j;
aby nie potrzebować dodatkowychvar
; usunęliśmy niepotrzebne nawiasy, umieszczając wszystko w korpusie pętli; zmieniłc>=k
czek nac<k
; i zmieniłif(c>0)break;
sięm=c>0?l+1:m;
, ponieważ pętla przestaje jeślim<=l
, zmieniającm
sięl+1
zapisuje bajt nadbreak
(i to również oszczędność na 2 nawiasach). :)m=c>0?l+1:m
Może być całkowicie usunięty, a&c<1
kontrola może być dodana do obiegu, a nie.n
Ponownie biorąc dane wejściowe , już ich nie potrzebujesz,q.Length
ale możesz ich użyćn
.C # (interaktywny kompilator Visual C #) z flagą
/u:System.Linq.Enumerable
, 69 bajtówWypróbuj online!
Bez flag, 73 bajty
Wypróbuj online!
źródło
JavaScript, 72 bajty
Kod
Wypróbuj online!
Akceptuje wprowadzanie w formacie (x [], T, M)
Wyjaśnienie
źródło
Python 3 , 136 bajtów
Wystarczy przetestować warunki, aby upewnić się, że zostały spełnione. 1, jeśli przyznana jest nagroda, 0, jeśli nie.
Wypróbuj online!
źródło
Python ,
7165 bajtówWypróbuj online!
Funkcja bez nazwy; port mojej galaretki odpowiedzi. Jako takie „tak” jest,
False
a „nie” jestTrue
. Tutaj jednak odrzucamy przypadki testowe w ramach odwrócenia i korzystamy z możliwości zainicjowaniaenumerate
liczeniaM
. (min
działałby również zamiastall
)źródło
R ,
4342 bajty-1 bajtów, wdrażając podejście jeszcze ściślej
Wypróbuj online!
Prosta implementacja R podejścia Jonathan's Jelly. Wypróbowałem kilka odmian, ale to najlepsze, co mogłem wymyślić, o kilka bajtów.
1 oznacza niepowodzenie, 0 oznacza sukces.
źródło
Japt,
16141311 bajtówSpróbuj
źródło
Java 8, 91 (lub 89?) Bajtów
Port odpowiedzi C # .NET na @Destroigo (po tym, jak trochę grałem w golfa), więc pamiętaj, aby go zagłosować!
Pobiera odpowiednio wejścia
N,x,T,M
i wyjściatrue
/false
dla"yes"
/"no"
.Ponieważ wyzwanie wymaga konkretnych
boolean
wyników, nie mogę zwrócić1
/0
tak, jak jest, ponieważ nie są to prawidłowe wartości true / Falsey w Javie. Jeśli dowolne dwie odrębne wartości wyjściowe dla"yes"
/"no"
są w zamian ważne dla tego wyzwania,>0
zwrot może zostać usunięty, aby zapisać dwa bajty, w którym to przypadku odpowiednio zwróci1
/0
dla"yes"
/"no"
.Wypróbuj online.
Wyjaśnienie:
źródło
C # (interaktywny kompilator Visual C #) , 66 bajtów
Wypróbuj online!
Inspirowany odpowiedzią @ EmbodimentOfIgnorance.
Wspomniałem o tym wcześniej, ale C # 8 ma dosłowny zakres, który może sprawić, że ta odpowiedź będzie taka:
Widziałem link do SharpLab z przykładem, ale nie byłem w stanie sam go uruchomić.
Jedną rzeczą, jaką był zmieniony
x
it
wartości po przecinku. To obsługuje przypadek, w którymt
nie można go podzielićk
trochę lepiej.źródło